[英]Using reactiveValues list to produce to produce dataframe with vector names - R Shiny
我正在創建一個動態的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 列的數據框。 向量的名稱與數據幀的列名不同。 向量的名稱是基於行的。
我想到了兩個(類似的)替代方案
第一個是做你做的一切,添加兩行代碼
library(shiny)
library(dplyr)
isolate({
data <- reactiveValues()
vector1 <- c("a", "b")
names(vector1) <- "test1"
vector2 <- c("a", "b")
names(vector2) <- "test2"
data[[paste0(1)]] <- vector1
data[[paste0(2)]] <- vector2
l = reactiveValuesToList(data)
df = bind_cols(l)
colnames(df) = vapply(l, function(x) unique(na.omit(names(x))), FUN.VALUE = character(1))
})
我會將data
reactiveValues 轉換為列表,然后將bind_cols()
與列表一起使用,然后通過獲取列表l
向量的名稱來獲取列名稱。 在這里你必須使用na.omit()
函數,因為當你這樣做時
vector1 <- c("a", "b")
names(vector1) <- "test1"
只有第一個元素的名稱為“test1”,另一個是NA
。
第二種選擇是相同的,但將名稱“test1”分配給vector1
所有元素
vector1 <- c("a", "b")
names(vector1) <- rep("test1", length(vector1))
但是在一個向量中擁有相同名稱的所有元素感覺很奇怪。 然后,你會做同樣的事情,沒有na.omit()
函數。
如果這不能滿足您的應用程序的要求,請分享您的應用程序的更多詳細信息,我會盡力幫助您。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.