R:测试可能不存在的变量

时间:2019-08-19 19:56:53

标签: r if-statement logic conditional-statements

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

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的答案适用于数值。更改了我的问题,以找到针对几种数据类型的通用解决方案。

1 个答案:

答案 0 :(得分: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