刚刚玩了一些基本函数,如果我在ifelse条件为真时使用which()函数作为参数之一,ifelse的行为似乎很奇怪,例如:
#I want to identify the location of all values above 6.5
#only if there are more than 90 values in the vector a:
set.seed(100)
a <- rnorm(100, mean=5, sd=1)
ifelse(length(a)>90, which(a>6.5), NA)
我得到了这个输出:
[1] 4
实际上它应该是以下内容:
[1] 4 15 25 40 44 47 65
如何使用if()函数使ifelse返回正确的值?
它似乎只输出匹配条件的第一个值。为什么这样做?
我很感激你的回答。谢谢。
答案 0 :(得分:3)
在这种情况下,您实际上不想使用ifelse
。正如BondedDust指出的那样,您应该将ifelse
视为一个函数,该函数接受三个向量,并根据第一个中的TRUE / FALSE值从后两个中选择值。或者,正如文档所说:
ifelse返回一个与填充的test相同形状的值 选择是或否的元素取决于是否 测试元素为TRUE或FALSE。
您可能只是想使用常规的if
语句。
与ifelse
的一个潜在混淆是 回收参数。具体来说,如果我们这样做
ifelse(rnorm(10) < 0,-1,1)
你会注意到第一个参数是长度为10的逻辑向量,但是我们的第二个“向量”都是长度为1。 R将根据需要简单地扩展它们以匹配第一个参数的长度。即使长度不能均匀扩展到正确的长度,也会发生这种情况。