微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

后续:从同一列表的元素中查找零位置的不匹配

如何解决后续:从同一列表的元素中查找零位置的不匹配

我正在跟进 this answer。我想创建一个 if() 条件来捕获当 list()一个元素中的 0 值对于同一 list() 的第二个元素中的相应位置不为 0 时?

例如,在A列表中,x的前两个值是0,而y的前两个值不是0。所以,我想把它当作 error (stop)。

然而,在B列表中,x的前三个值为0y的前三个值为0。所以,我想把它当作 (warning)。

问:虽然我预计 D 列表会出错,但我想知道为什么我的 if() 没有捕捉到它,是否有解决方法

( A = list(x = c(0,2,2),y = c(3,3,1,1)) ) # Expect error
( B = list(x = c(0,1),y = c(0,1)) ) # Expect warning
( C = list(x = c(5,5,5),y=c(1,1)) ) # Expect fine


( D = list(x = c(0,0),y = c(2,0)) ) ## Expect error but my function doesn't catch it!



check <- function(l){
  df <- as.data.frame(l)
  if(any(df == 0)){
    if(any(rowSums(df) == df[,1]) ){
      warning("this is a warning")
    } else {
      stop("this is an error")
    }
  }
}

check(A) # Works fine
check(B) # Works fine
check(C) # Works fine

check(D) # NOT OK! Doesn't throw any error!

解决方法

我们可能会使用 xor

check <- function(l){
  
  if(any(unlist(l) == 0)){
    if(!any(do.call(xor,l)) ){
      warning("this is a warning")
    } else {
      stop("this is an error")
    }
  }
}

-测试

check(A)
#Error in check(A) : this is an error

check(B)
#Warning message:
#In check(B) : this is a warning
check(C)
check(D)
#Error in check(D) : this is an error

或将 rowSums 更改为

check <- function(l){
  df <- as.data.frame(l)
  if(any(df == 0)){
    if(!any(rowSums(df == 0) == 1) ){
      warning("this is a warning")
    } else {
      stop("this is an error")
    }
  }
  }
  
check(A)
#Error in check(A) : this is an error
check(B)
#Warning message:
#In check(B) : this is a warning
check(C)
check(D)
#Error in check(D) : this is an error
  

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?