繁体   English   中英

是什么导致我的 for/if 循环在 R 中返回“更长的 object 长度不是更短的 object 长度的倍数”警告

[英]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.

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