在 Shiny 中使用 rhandsontable 时出错
Posted
技术标签:
【中文标题】在 Shiny 中使用 rhandsontable 时出错【英文标题】:Error using rhandsontable in Shiny 【发布时间】:2017-10-08 04:10:43 【问题描述】:我在一个闪亮的应用程序中观察到rhandsontable
的一些奇怪行为。在这个简单的示例中,如果发生某些事件,我将 data.frame
分配给 reactiveValues
元素。然后数据显示在rhandsontable
中。但是,当我更改表的某些条目时,函数 hot_to_r
失败:seq.default 中的错误:参数“length.out”的长度必须为 1
奇怪的是,只有当我使用 iris
时才会出现错误,但当我使用 iris[1:50, ]
时不会出现错误,这应该是相同的。有人知道如何解决这个问题吗?
(在单击actionButton
之前values$data
仍为NULL
时会出现另一个错误。我知道这一点,但这与问题无关。)
library(shiny)
ui <- fluidPage(
actionButton("click", "click"),
rHandsontableOutput("table")
)
server <- function(input, output, session)
values <- reactiveValues(data = NULL)
observeEvent(input$click,
values$data <- iris # with iris[1:50, ] no error appears
)
output$table <- renderRHandsontable(
rhandsontable(t(values$data))
)
observe(
if (!is.null(input$table$changes$changes))
table_data <- hot_to_r(input$table)
print(table_data)
)
shinyApp(ui, server)
【问题讨论】:
我猜错误来自转置数据。检查:t(head(iris))
。为什么要转置,以适应表格输出?
我实际使用的data.frame只有一行,所以我认为表格输出看起来更好转置。当我想在表格旁边放置其他 ui 元素时,这更适合列设计。
可以通过as.data.frame(do.call(rbind, input$table$data))
获取修改后的数据集
【参考方案1】:
@BigDataScientist 正在做某事,colnames(t(iris))
是 NULL
,而 colnames(t(iris[1:50,]))
不是。这对我来说是个谜,但防止空值应该可以解决您的问题。在对rhandsontable
的调用中使用某些东西应该可以解决问题。使用
rhandsontable(data.frame(t(values$data)))
为我工作。
【讨论】:
以上是关于在 Shiny 中使用 rhandsontable 时出错的主要内容,如果未能解决你的问题,请参考以下文章
如何访问在 Shiny 中呈现的 rhandsontable 的 JS 变量名?
在 R Shiny 中,如何使用 actionButton 重置 rhandsontable 中的数据(反转所有手动输入)?
r shiny:从另一个 rhandsontable 更新 rhandsontable