我认为这是一个常见的问题,但尚未找到答案。假设我有以下列表:
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的答案适用于数值。更改了我的问题,以找到针对几种数据类型的通用解决方案。
答案 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