比较两个不同列表的元素

朱利安·纳瓦拉(Julien Navarre)

我有两个参数列表,一个列表包含参数值(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 = "")
  }
}

但是我觉得可能会有更直接,更优雅的方法来实现这一目标,您有什么想法吗?谢谢 !

泽拉兹尼7

这是一种循环使用您的参数并使用的方法match.arg结果是可用于进一步处理的列表:

results <- lapply(names(parameters), function(i) {
  if (!is.null(parameters.enum[[i]])) {
    try(match.arg(parameters[[i]], parameters.enum[[i]]))
  }
})

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

比较两个列表中的元素并添加不同的元素

如何比较两个不同列表的每个元素?

使用 Prolog 比较两个列表并收集不同列表中的不同元素

比较两个不同的客户列表

如何比较两个列表元素?

比较两个列表中的元素,并返回与原始列表不同的单独列表

比较两个列表的元素并删除列表的特定元素

使用两个列表比较元素并在这两个列表中创建一个不同元素的列表?

如何比较两个具有不同长度的列表并删除一些元素?

比较两个不同列表中的元素时遇到问题

列表理解比较两个不同的列表

比较两个列表,用逗号分隔,以了解每个列表中的共同元素和不同元素

比较列表(列表)中两个元素的位置

将两个DataFrames元素与不同的DataFrame进行比较

比较不同列表python中两个元组的项目

如何比较两个不同的列表类?

如何比较两个具有不同顺序的列表?

如何比较两个不同的列表并获得两个列表的差异?

AssertJ 如何通过元素值比较两个列表?

比较两个嵌套列表并保持元素的并集

按元素比较两个列表的更快方法

比较Django模板中两个列表的对应元素

比较python中两个列表中的元素

包含用于比较两个列表中元素的操作

比较python中两个列表中的元素

在python中按元素比较两个列表

比较两个列表以获得不匹配的元素

比较两个列表并获取相同元素的索引

比较两个列表以使其元素相等