【发布时间】:2021-02-12 01:48:32
【问题描述】:
我正在创建一个动态的 reactiveValues 向量列表,并希望得到一个数据框,其中包含向量名称的列名。
在我的例子中,向量的名称是由用户生成的,并且可以更改
e.g.
data<-reactiveValues()
vector1<-c("a", "b)
names(vector1)<-"test1"
vector2<-c("a", "b)
names(vector2)<-"test2"
data[[paste0(1)]]<-vector1
data[[paste0(2)]]<-vector2
bind_cols(data)
这会导致一个非常丑陋的对象,其中列名是“1”和“2”(使用 isolate(reactiveValuesToList(data)) 检查)
向量的名字埋在属性里
如果只返回数据(而不是 bind_cols(data)),那么attributes(data[[`1`]])$dimnames[[2]] 将返回向量的名称。
我该如何解决这个问题?
编辑:
原来是个白痴。我真正想要的是返回一个 1 列数据框。向量的名称与数据框的列名不同。向量的名称是基于行的。
【问题讨论】:
-
您能指出正确的输出是什么吗?我不明白你是想将“test1”和“test2”作为列名,还是“a”和“b”。
-
@Tomas Capretto 期望的结果是列名称与向量名称相同(即 test1 等)
-
你不能用
data[[names(vector1)[1]]] <- vector1吗? (请注意,您将向量名称和向量元素的名称混为一谈:例如在vector1 <- c("a", "b"); names(vector1) -
@starja 我想我真正想做的是要么得到一个 reactiveValue,我可以像你做一个普通列表一样用一个整数对其进行子集化,或者重命名 reactiveValues 中的名称
-
我认为最简单的方法是使用
reactiveValuesToList。您会得到一个普通列表,您可以使用整数对其进行子集化。这有帮助吗?否则你可以用你的核心问题来更新问题