根据对应的元素输出嵌套列表的名称
Output the names of a nested list based on their corresponding elements
如何输出与其元素对应的嵌套列表的名称?在这个例子中,我想输出 if ("cat") then "foo" , if("dog") then "bar".. 等。我想避免使用多个 if else statements ,因为可能有 100变量
parms <- list(
"foo" = list( id = "cat", range = c(1,10)),
"bar" = list( id = "dog", range = c(20,30)),
"var" = list( id = "mouse", range = c(40,50))
)
遵循@A5C1D2H2I1M1N2O1R2T1 评论中的建议:
names(grep("cat", sapply(parms, "[[", "id"), value = TRUE))
[1] "foo"
里面有什么:
sapply(parms, "[[", "id")
部分使用每个 id
(猫、狗、...)和每个嵌套列表的名称(foo、bar、...)创建一个命名向量
grep
returns 一个名为 vector 的元素,其重合元素及其名称。
names
部分从命名向量中提取名称(在本例中为 foo)。
您可以编写一个函数来动态处理您的请求。
get_names <- function(x, name, value) {
names(Filter(function(p) all(p[[name]] == value), x))
}
get_names(parms, 'id', 'cat')
#[1] "foo"
get_names(parms, 'range', c(1, 10))
#[1] "foo"
get_names(parms, 'range', c(40, 50))
#[1] "var"
如果您想从函数中排除 name
依赖性。
get_names <- function(x, value) {
names(Filter(function(p) any(unlist(p) == value), x))
}
get_names(parms, 'cat')
#[1] "foo"
get_names(parms, 40)
#[1] "var"
编辑
get_names <- function(x, name, value) {
names(x)[sapply(x, `[[`, name) %in% value]
}
get_names(parms, 'id', c('cat', 'dog'))
#[1] "foo" "bar"
如何输出与其元素对应的嵌套列表的名称?在这个例子中,我想输出 if ("cat") then "foo" , if("dog") then "bar".. 等。我想避免使用多个 if else statements ,因为可能有 100变量
parms <- list(
"foo" = list( id = "cat", range = c(1,10)),
"bar" = list( id = "dog", range = c(20,30)),
"var" = list( id = "mouse", range = c(40,50))
)
遵循@A5C1D2H2I1M1N2O1R2T1 评论中的建议:
names(grep("cat", sapply(parms, "[[", "id"), value = TRUE))
[1] "foo"
里面有什么:
sapply(parms, "[[", "id")
部分使用每个id
(猫、狗、...)和每个嵌套列表的名称(foo、bar、...)创建一个命名向量grep
returns 一个名为 vector 的元素,其重合元素及其名称。names
部分从命名向量中提取名称(在本例中为 foo)。
您可以编写一个函数来动态处理您的请求。
get_names <- function(x, name, value) {
names(Filter(function(p) all(p[[name]] == value), x))
}
get_names(parms, 'id', 'cat')
#[1] "foo"
get_names(parms, 'range', c(1, 10))
#[1] "foo"
get_names(parms, 'range', c(40, 50))
#[1] "var"
如果您想从函数中排除 name
依赖性。
get_names <- function(x, value) {
names(Filter(function(p) any(unlist(p) == value), x))
}
get_names(parms, 'cat')
#[1] "foo"
get_names(parms, 40)
#[1] "var"
编辑
get_names <- function(x, name, value) {
names(x)[sapply(x, `[[`, name) %in% value]
}
get_names(parms, 'id', c('cat', 'dog'))
#[1] "foo" "bar"