ifelse
令人困惑。我希望有人可以帮助解释。
考虑以下代码:
x1 = c(1,4,3)
y1 = c(2,3,5)
# 1
> ifelse(x1 > y1, x1^2 + y1^2,y1)
[1] 2 25 5
# 2
> ifelse(x1 > y1, sum(x1),y1)
[1] 2 8 5
# from #1 I guess second element should be sum(x1) == sum(x1[2]) == sum(4)
为什么?
更新:
看完《 R编程的艺术》一书后,我解决了我的问题。
ifelse(b,u,v)
,其中b
是布尔向量,而u
和v
是向量。 返回值本身就是一个向量。如果i
为true,则元素u[i]
为b[i]
;如果v[i]
为false,则元素b[i]
所以
ifelse(x1 > y1, sum(x1),y1) == ifelse(x1 > y1, c(sum(x1),sum(x1),sum(x1)),c(2,3,5)) # by recycling
# then b = c(T,F,T), u = c(8,8,8), v = c(2,3,5)
# therefore output would be (v[1],u[2],v[3]), i.e.
# [1] 2 8 5
答案 0 :(得分:1)
sum(x1)=8
很明显,因为1 + 4 + 3 = 8。现在您可能想知道为什么ifelse
似乎对表达式的计算方式不同:不是,只是^2
不能应用于向量(向量平方)是什么,所以它在元素上应用明智。不过,您可以将sum()
应用于向量,这会在第二次评估中发生。尝试ifelse(x1 > y1, x1,y1)