是什么导致我的 for/if 循环到 R 中的 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。如果它们都通过了此检查,则应该添加x 向量中第 i 个元素的值到 PA。如果失败,则应添加 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 向量仍保持 'null',并且它 returns 一条警告消息说 'There were 50 or more warnings (use warnings() to see the first 50)'。这个returns

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

关于如何解决这个问题的任何帮助?谢谢!

“向量是从 excel 文件中加载并使用 'x <- S1L1$PercentageCoverage' 和 'y <- S1L1$FoldCount' 获取的。”

看起来您将 S1L1 作为具有 PercentageCoverage 和 FoldCount 列的数据框,并且想要在 PercentageCoverage >= 1 且 FoldCount>=70 时创建一个新列 PA,那么 PA 应该是 PercentageCoverage 否则为 0,对吗?

S1L1$PA <- ifelse(S1L1$PercentageCoverage>=1 & S1L1$FoldCount>=70, S1L1$PercentageCoverage, 0)

这是一个非常简短的解决方案:

function(x, y){
    x * (x >= 1 & y >= 70)
}

注意括号。在那里创建了一个布尔值,即 1s 或 0s,然后将它们与 x 相乘。