我有两个参数列表,一个列表包含参数值(parameters
在下面的示例中),另一个包含每个参数可以采用的所有枚举值(parameters.enum
)。
参数不是强制性的,因此可以是必需的NULL
。并未在中定义所有参数parameters.enum
,如果缺少参数,则此参数parameters.enum
没有限制值。
parameters.enum <- list(a = c("a1", "a2"),
b = c("b1", "b2"),
c = "c1")
parameters <- list(a = "a1", #allowed
b = "a1", #not allowed
c = NULL, #allowed
d = "aaa") #allowed
对于每一个非NULL
参数parameter
和定义的parameters.enum
,我想检查,如果他们采取了有效的值。如果不是,我想显示一条消息,例如:'b' should be one of "b1", "b2"
。
目前,我使用循环来实现所需的功能:
for (i in seq_along(parameters)) {
j <- which(names(parameters.enum) == names(parameters[i]))
if (length(j) != 0L && !is.null(parameters[[i]]) && !parameters[[i]] %in% parameters.enum[[j]]) {
cat("Parameter \'", names(parameters[i]), "\' should be one of ", paste0("\"", parameters.enum[[j]], "\"", collapse = ", "), sep = "")
}
}
但是我觉得可能会有更直接,更优雅的方法来实现这一目标,您有什么想法吗?谢谢 !
这是一种循环使用您的参数并使用的方法match.arg
。结果是可用于进一步处理的列表:
results <- lapply(names(parameters), function(i) {
if (!is.null(parameters.enum[[i]])) {
try(match.arg(parameters[[i]], parameters.enum[[i]]))
}
})
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句