R ifelse - 向量顺序的意外变化

标签 r

运行后我得到了意想不到的结果:

 test = c(rep(FALSE, 2), rep(TRUE, 6))
 ifelse(test, c(1:8)[test], 1)
[1] 1 1 5 6 7 8 3 4 

我本以为 1 1 3 4 5 6 7 8yes 的索引在 ifelse(test, yes, no)被转动。也许我需要更多咖啡,但如果有人能解释这个结果背后的逻辑,我将不胜感激。

最佳答案

ifelse 中向量的长度应该相同。在 OP 的代码中,第二个参数再次被子集化,而第三个参数 1 被回收(虽然很好)

ifelse(test, 1:8, 1)
#[1] 1 1 3 4 5 6 7 8

?ifelse的文档中有说明

If yes or no are too short, their elements are recycled. yes will be evaluated if and only if any element of test is true, and analogously for no.

这里,'yes', 'no' 表示 ifelse 中的一般用法参数

ifelse(test, yes, no)

关于R ifelse - 向量顺序的意外变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44699799/

相关文章:

r - data.table 合并产生额外的列 [R]

r - 使用 group_by 和 summarize 查找子组中的百分比

r - 如何在ggplot的密度图中调整x轴?

R:读取压缩的二进制文件

r - 是否有 R 函数用于将列表中的向量修剪为最小向量长度?

python - SQL "partition by"Python/R 中的类似功能

将 NA 替换为基于行条件的值

r - Octave/Matlab 中的scale() R 函数等效项

sql - 您将如何使用 SQL 或 R 库 sqldf 执行此任务?

r - Shiny 的日期和时间显示 "T"和 "Z"?