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

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

4

1 回答 1

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
于 2013-07-01T10:57:10.033 回答