![](/img/trans.png)
[英]What is causing my R script to return longer object length is not a multiple of shorter object length?
[英]What is causing my for/if loop to return 'longer object length is not a multiple of shorter object length' warning in R
我正在尝试根据其他两个向量的条件生成向量 (PA)。 其他向量的长度均为 1978 个元素。
这些向量取自加载到 excel 文件中并使用“x <- S1L1$PercentageCoverage”和“y <- S1L1$FoldCount”。
我相信代码应该检查 x 中的每个元素是否等于或大于 1,以及 y 中的每个元素是否等于或大于 70。如果它们都通过此检查,则应添加第 i 个元素的值在到 PA 的 x 向量中。 如果任何一个失败,它应该加 0。
PresenceCollector <- function(x, y){
PA <- c()
for (i in 1:1978){
if ((x[i] >= 1) && (y[i] >= 70)){
PA <- c(PA, x[i])
} else {
PA < - c(PA, 0)
}
}
}
即使在运行代码后,PA 向量仍然为“空”,并且它返回一条警告消息,指出“有 50 个或更多警告(使用 warnings() 查看前 50 个)”。 这返回
1: In PA < -c(PA, 0) :
longer object length is not a multiple of shorter object length
2: In PA < -c(PA, 0) :
longer object length is not a multiple of shorter object length
3: In PA < -c(PA, 0) :
longer object length is not a multiple of shorter object length
依此类推,直到打印出 50
关于如何解决这个问题的任何帮助? 谢谢!
这是一个非常简短的解决方案:
function(x, y){
x * (x >= 1 & y >= 70)
}
注意括号。 在那里创建了一个 boolean 值,即1
s 或0
s,然后将它们与 x 相乘。
“这些向量是通过加载 excel 文件并使用‘x <- S1L1$PercentageCoverage’ 和‘y <- S1L1$FoldCount’ 获取的。”
看起来您的 S1L1 为 dataframe,带有 PercentageCoverage 和 FoldCount 列,并且想要在 PercentageCoverage >= 1 且 FoldCount>=70 时创建一个新列 PA,那么 PA 应该是 PercentageCoverage 否则为 0,对吗?
S1L1$PA <- ifelse(S1L1$PercentageCoverage>=1 & S1L1$FoldCount>=70, S1L1$PercentageCoverage, 0)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.