2013-07-01 68 views
1

我有一個名爲newdata的數據框。它有兩列,分別命名爲BONUSGENDER以下兩個代碼之間的區別

當我寫在r下面的代碼:

> newdata <- within(newdata,{ 
        PROMOTION=ifelse(BONUS>=1500,1,0)}) 

它的工作,雖然我還沒有使用循環在這裏,但下面的代碼不無環運行。爲什麼?

> add <- with(newdata, 
      if(GENDER==F)sum(PROMOTION)) 

    Warning message: 
    In if (GENDER == F) sum(PROMOTION) : 
    the condition has length > 1 and only the first element will be used 

我的問題是爲什麼在第一個代碼中所有元素都被使用了?

+0

這已被問過[這裏](http://stackoverflow.com/questions/17252905/else-if-vs-ifelse/17253069#17253069) – Metrics

+0

[**這是一個非常有趣的職位'if-else' **](http://stackoverflow.com/questions/16275149/does-ifelse-really-calculate-both-of-its-vectors-every-time-is-it-slow) ,以防你有興趣知道更多。 – Arun

回答

5

ifelse是向量化的,但if不是。例如:

> x <- rbinom(20,1,.5) 
> ifelse(x,TRUE,FALSE) 
[1] TRUE TRUE FALSE TRUE FALSE TRUE FALSE TRUE TRUE TRUE TRUE FALSE 
[13] FALSE TRUE TRUE FALSE TRUE TRUE TRUE TRUE 

> if(x) {TRUE} else {FALSE} 
[1] TRUE 
Warning message: 
In if (x) { : 
    the condition has length > 1 and only the first element will be used 
+0

非常感謝。 – ABC