【问题标题】:R: Testing a variable that possibly doesn't existR:测试一个可能不存在的变量
【发布时间】:2019-08-19 19:56:53
【问题描述】:

我认为这是一个常见问题,但无法找到此问题的答案。假设我有以下列表:

myList <- list(
  apple = 15,
  orange = NULL
)

我想测试它的向量的值,虽然我在执行测试时不能确定这些向量是否存在

if(myList$apple > 1) print("Y") else print("N")
if(myList$orange > 1) print("Y") else print("N")
if(myList$banana == "plenty") print("Y") else print("N")

这显然行不通

Error in if (myList$orange > 1) print("Y") else print("N") :  argument is of length zero
Error in if (myList$banana == "plenty") print("Y") else print("N") : argument is of length zero

但是,由于需要太多细节,我想避免使用 exists() 进行嵌套测试。所以我的问题是:能否仅在一个条件语句中对可能不存在的变量进行测试?

谢谢

编辑:@d.b 的回答适用于数值。更改了我的问题以找到适用于多种数据类型的通用解决方案。

【问题讨论】:

  • 试试is.null
  • if (ifelse(is.null(myList), FALSE, ifelse(my$List$apple &gt; 1, TRUE, FALSE)) print("Y")

标签: r if-statement logic conditional-statements


【解决方案1】:

使用具有适当值的max

max(0, NULL)
#[1] 0

你可以选择1

if(max(myList$apple, 1) > 1) print("Y") else print("N")
#[1] "Y"
if(max(myList$orange, 1) > 1) print("Y") else print("N")
#[1] "N"
if(max(myList$banana, 1) > 1) print("Y") else print("N")
#[1] "N"

或者您可以将max 与逻辑本身一起使用以应用于其他数据类型

max(c(myList$apple > 1, 0)) == 1
#[1] TRUE
max(c(myList$orange > 1, 0)) == 1
#[1] FALSE
max(c(myList$banana == "plenty", 0)) == 1
#[1] FALSE

【讨论】:

  • 非常好,这适用于我的示例,但是否有一些通用的东西适用于其他数据类型?
  • 似乎if("plenty" %in% myList$banana) print("Y") else print("N") 适用于字符串。
猜你喜欢
  • 1970-01-01
  • 2018-10-20
  • 1970-01-01
  • 2018-09-02
  • 1970-01-01
  • 2022-01-18
  • 1970-01-01
  • 2013-01-14
  • 1970-01-01
相关资源
最近更新 更多