ifelse 在不同的函数中给出不同的输出

ifelse gives different output in different function

提问人:Abdullah Al Mahmud 提问时间:11/13/2023 最后编辑:neilfwsAbdullah Al Mahmud 更新时间:11/13/2023 访问量:51

问:

我想做什么:

长度大于 1 的向量将转换为 (0,1) 范围。

但我只得到第一个值。

这里的答案讨论了这个问题,但我找不到解决我的方法。

使用以下代码。

x <- 1:10
x
range01 <- function(x) { (x - min(x)) / (max(x) - min(x)) }
range01(x)
ifelse(length(x) > 1, range01(x), x)

[1] 0

我只得到第一个值。

但是,以下ifelse给出了一个向量,我将其用作测试。

ifelse(x >= 0, sqrt(x), NA)

[1] 1.000000 1.414214 1.732051 2.000000 2.236068 2.449490 2.645751 
    2.828427 3.000000 3.162278
r if 语句 向量

评论

3赞 thelatemail 11/13/2023
我怀疑你不想要这个功能。if(length(x)>1) range01(x) else xifelse
2赞 Jon Spring 11/13/2023
我想你想要'if(length(x)>1) range01(x) else x'。Ifelse 是一个向量函数,它需要测试向量(通常长于长度 1)
2赞 Seth 11/13/2023
示例中的两个测试并不等效。 返回单个值,而返回长度与 相同的向量。@thelatemail建议都会起作用。length(x)>1x >= 0x

答:

1赞 Abdullah Al Mahmud 11/13/2023 #1

使用@Seth提供的信息,我现在有一个解决方案。我从条件创建了一个矢量化输出length(x)>1

ifelse(rep(length(x)>1, length(x)), range01(x), x)