我有一个名为newdata
的数据框。它有两列,分别为BONUS
和GENDER
。
当我在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 :(得分: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