如何在不在 R 中添加索引的情况下获取(子)对象的名称?
How do i get the names of an (sub-)object without having indices added in R?
我想获取一个(子)对象的名称(因此 unlist
之后的所有结果对象),而无需在 R 中添加索引。
(简化)示例数据:(更复杂的数据见文末备注)
lst <- list(
a = data.frame(b = 1, c = c(1, 2, 3), "d2" = 5, "x21" = 3)
)
预期输出:
c("b", "b", "b", "c", "c", "c", "d2", "d2", "d2", "x21", "x21", "x21")
当前输出:
> unlist(lst) %>% names
[1] "aa" "b.x" "b.a.b1" "b.a.b2" "b.a.b3" "b.a.c1" "b.a.c2" "b.a.c3" "b.a.d21" "b.a.d22" "b.a.d23" "b.a.x211" "b.a.x212"
[14] "b.a.x213"
我尝试了什么:
lapply(lst, names)
越来越近了。但请注意,这是简化数据,目标 data.frame 可以嵌套在
3 个以上的家长名单。
lst <- list(
list(aa = 1,
b = list(x = 2,
a = data.frame(b = 1, c = c(1, 2, 3), "d2" = 5, "x21" = 3)
)
)
)
我想开始按点拆分,然后检查模式的结果值 (b1、b2、b3) 或 (d21、d22、d23),如果模式清晰如 (1-10),则删除数字) 被检测到。但好像
很好的解决方法。所以想问一下有没有更好的方法可以跟进
这个:
lapply(lst, function(x) rep(names(x), each=nrow(x)))
Returns:
$a
[1] "b" "b" "b" "c" "c" "c" "d2" "d2" "d2" "x21" "x21" "x21"
可能有更好的方法,但这会得到输出:
lst <- rlist::list.flatten(lst)
unlist(
unname(
Map(
function(x, y) sub('.*\.', '', rep(x, each = y)),
names(lst),
sapply(lst, length)
)
)
)
你的第二个例子:
[1] "aa" "x" "b" "b" "b" "c" "c" "c" "d2" "d2" "d2" "x21" "x21"
[14] "x21"
数据:
lst <- list(
list(aa = 1,
b = list(x = 2,
a = data.frame(b = 1, c = c(1, 2, 3), "d2" = 5, "x21" = 3)
)
)
)
我想获取一个(子)对象的名称(因此 unlist
之后的所有结果对象),而无需在 R 中添加索引。
(简化)示例数据:(更复杂的数据见文末备注)
lst <- list(
a = data.frame(b = 1, c = c(1, 2, 3), "d2" = 5, "x21" = 3)
)
预期输出:
c("b", "b", "b", "c", "c", "c", "d2", "d2", "d2", "x21", "x21", "x21")
当前输出:
> unlist(lst) %>% names
[1] "aa" "b.x" "b.a.b1" "b.a.b2" "b.a.b3" "b.a.c1" "b.a.c2" "b.a.c3" "b.a.d21" "b.a.d22" "b.a.d23" "b.a.x211" "b.a.x212"
[14] "b.a.x213"
我尝试了什么:
lapply(lst, names)
越来越近了。但请注意,这是简化数据,目标 data.frame 可以嵌套在 3 个以上的家长名单。
lst <- list(
list(aa = 1,
b = list(x = 2,
a = data.frame(b = 1, c = c(1, 2, 3), "d2" = 5, "x21" = 3)
)
)
)
我想开始按点拆分,然后检查模式的结果值 (b1、b2、b3) 或 (d21、d22、d23),如果模式清晰如 (1-10),则删除数字) 被检测到。但好像 很好的解决方法。所以想问一下有没有更好的方法可以跟进
这个:
lapply(lst, function(x) rep(names(x), each=nrow(x)))
Returns:
$a
[1] "b" "b" "b" "c" "c" "c" "d2" "d2" "d2" "x21" "x21" "x21"
可能有更好的方法,但这会得到输出:
lst <- rlist::list.flatten(lst)
unlist(
unname(
Map(
function(x, y) sub('.*\.', '', rep(x, each = y)),
names(lst),
sapply(lst, length)
)
)
)
你的第二个例子:
[1] "aa" "x" "b" "b" "b" "c" "c" "c" "d2" "d2" "d2" "x21" "x21"
[14] "x21"
数据:
lst <- list(
list(aa = 1,
b = list(x = 2,
a = data.frame(b = 1, c = c(1, 2, 3), "d2" = 5, "x21" = 3)
)
)
)