以下两个代码之间的区别

时间:2013-07-01 10:54:39

标签: r loops if-statement for-loop

我有一个名为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

我的问题是为什么在第一个代码中使用了所有元素?

1 个答案:

答案 0 :(得分: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