簡體   English   中英

使用reactiveValues列表生成帶有向量名稱的數據框 - R Shiny

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM