繁体   English   中英

R,使用参数组合在循环中出错后继续

[英]R, continue after error in loop with combination of arguments

我为相当重复的“函数”或一段代码创建了一个循环。

我根据两个变量对数据集进行了 dplyr 过滤。 然后我制作一个线性模型,计算均值并进行 LSD 测试。

我所做的循环填充了过滤器中的变量。

for(x in c("B1", "B2", "B3")){
  for(z in c(1:5)){
  df <- filter(testb, column1== x, column2 == z )
#rest of functions here

循环工作正常。 我唯一的问题是当循环尝试过滤 x: B2 和 z: 5 时,因为数据集中不存在这种组合。 我收到以下错误:

Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) : 
contrasts can be applied only to factors with 2 or more levels

我确切地知道它为什么会产生错误,因为该因子的第 2 列 z=5 不存在。 我希望循环继续到第 1 列和第 2 列的下一个变量,如果发生这种情况,请转到 x:B3 和 z:1。

当我使用时,代码工作正常

for(z in c(1:4)){

但我想念 x:B1 和 x:B3 与 z:5 的组合。

后来我想从 column1 做更多的变量,但是 x 和 z 的组合会有更多的不匹配。

有人有任何提示吗?

如果没有可重现的 Example ,我无法对其进行测试,但将您的代码更改为:

for(x in c("B1", "B2", "B3")){
  for(z in c(1:5)){
     if(any(testb$column1 == x & testb$column2 == z)){
        df <- filter(testb, column1== x, column2 == z )

可能会起作用。

for(x in c("B1", "B2", "B3")){
  for(z in c(1:5)){
    tryCatch({df <- filter(testb, column1== x, column2 == z)},
             next)
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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