【问题标题】:Using reactiveValues list to produce to produce dataframe with vector names - R Shiny使用 reactiveValues 列表生成具有矢量名称的数据帧 - R Shiny
【发布时间】: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]]] &lt;- vector1吗? (请注意,您将向量名称和向量元素的名称混为一谈:例如在vector1 &lt;- c("a", "b"); names(vector1)
  • @starja 我想我真正想做的是要么得到一个 reactiveValue,我可以像你做一个普​​通列表一样用一个整数对其进行子集化,或者重命名 reactiveValues 中的名称
  • 我认为最简单的方法是使用reactiveValuesToList。您会得到一个普通列表,您可以使用整数对其进行子集化。这有帮助吗?否则你可以用你的核心问题来更新问题

标签: r shiny


【解决方案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))
})

我会将datareactiveValues 转换为列表,然后将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() 函数。

如果这不能满足您应用的要求,请分享您的应用的更多详细信息,我会尽力帮助您。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-19
    • 2019-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-17
    • 1970-01-01
    相关资源
    最近更新 更多