【发布时间】:2021-05-13 14:19:14
【问题描述】:
编辑:很明显,整个场景只是为了解决问题而纠缠不清,而真正的问题在于这段代码创建了一堆对象而没有命名它们。很抱歉给您带来不便,我把整个事情都搁置了,以防有人在某个地方、某个时候遇到同样的问题。
假设我有一个向量列表,比如
a<-c(1); b<-1:3; c<-1:1000
L <- list(a, b, c)
我想将所有这些向量组合到一个数据框中,并添加一列,其中包含值源自的向量的名称。一种方法是
> tibble(x=c(a, b, c), name=rep(c("a", "b", "c"), times=c(1, 3, 1000)))
# A tibble: 1,004 x 2
x name
<dbl> <chr>
1 1 a
2 1 b
3 2 b
4 3 b
5 1 c
6 2 c
7 3 c
8 4 c
9 5 c
10 6 c
# ... with 994 more rows
但是,我有三个以上的向量,并且希望比每次更改一个向量时都手动将向量名称放入字符串中更灵活。此外,该列表未命名。
如何将它放入一个接受任何向量列表并按要求返回数据帧的函数中?任何方法 - 无论是从对象列表生成字符串列表、仅从对象创建正确命名的列表,还是直接使用 purrr::map() 或某种形式的 apply(),都将受到欢迎。
注意:我对map()-approach 的意思是,例如,类似
map_dfr(list(a, b, c), ~tibble("x"=x, "name"={{ x }}))
并且可能会使用某种准引用。这个例子当然不能按预期工作。
【问题讨论】:
-
如果你有很多漂浮的对象被强制转换成一个数据框,也许最好先考虑如何将它们放入一个列表中?
-
列表中的对象实际上来自一个执行不力的引导过程序列化......我知道这并不理想,但我担心将引导写入函数可能需要更多时间而不是以这种方式将它们放在一起。
-
很难想象这个场景,但是像这样
vars = grep("[a-z]",ls(),value=TRUE) ; map_dfr(vars,~data.frame(value = get(.x),name=.x)) -
你需要一些方法来拉出所有的对象,然后像上面的
get()一样,我认为这是一个巨大的混乱 -
@StupidWolf 我同意,这是一团糟。