繁体   English   中英

在 R 中使用哪个函数的 ifelse 行为

[英]ifelse behaviour with which function in R

刚刚玩了一些基本函数,如果我使用 which() 函数作为 ifelse 条件为真时的参数之一,那么 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

那么如何让 ifelse 使用which()函数返回正确的值?
它似乎只输出与条件匹配的第一个值。 为什么这样做?

在这种情况下,您实际上不想使用ifelse 正如 BondedDust 指出的那样,您应该将ifelse视为一个函数,它采用三个向量并根据第一个中的 TRUE/FALSE 值从后两个向量中挑选值。 或者,正如文档所说:

ifelse 返回一个与 test 具有相同形状的值,其中填充了从 yes 或 no 中选择的元素,具体取决于 test 的元素是 TRUE 还是 FALSE。

您可能只是想改用常规的if语句。

ifelse一个潜在混淆是它确实回收了参数。 具体来说,如果我们这样做

ifelse(rnorm(10) < 0,-1,1)

您会注意到第一个参数是长度为 10 的逻辑向量,但我们的第二个“向量”的长度均为 1。 R 将根据需要简单地扩展它们以匹配第一个参数的长度。 即使长度不能均匀地扩展到正确的长度,也会发生这种情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM