我有一个多级列表l
,其中包含任意数量的级别和条目。举一个简单的例子:
l <- list(a = 1,
b = list(x = 2, y = 3),
c = list(dog = 5, cat = list(fish = 3, mouse = 10))
)
在我的包中,用户传递了一个“地址”,它指定了这个列表中的一个对象。地址作为字符串传递,格式如下:
address = "$c$cat$fish"
这不包括列表本身的名称。
我编写了一个函数来检查地址是否“有效”,从某种意义上说,我想检查指定地址是否存在对象。该函数的主要内容如下:
# this is the call to evaluate, as a string
expr_str <- paste0("address_value <- l", address)
# evaluate the call
eval(str2lang(expr_str))
if(is.null(address_value)){
warning("Address is NULL or not found in list")
}
现在,这可行(尽管可能有一种更优雅的方式来做到这一点)。但问题是我在 CMD 检查中得到了一个 NOTE 因为address_value
它没有可见的绑定,因为它是在eval()
.
我想摆脱笔记,但我不确定如何在address
不使用eval()
.
任何人都可以帮助解决这个问题吗?
to 的赋值address_value
可以在之外,eval
这样可以避免 CMD 检查中未声明的变量 nag。
check_address <- function(address) {
expr_str <- paste0("l", address)
# evaluate the call
address_value <- eval(str2lang(expr_str))
if(is.null(address_value)){
warning("Address is NULL or not found in list")
}
address_value
}
结果是:
check_address("$c$cat$fish")
#> [1] 3
check_address("$c$cat$banana")
#> NULL
#> Warning message:
#> In check_address("$c$cat$banana") : Address is NULL or not found in list
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句