我尝试使用rhsonsontable构建闪亮的应用程序。
首先运行该应用程序时,应呈现一个空表,然后可以通过复制和粘贴将其填充数据。粘贴数据后,应绘制值的图。
我的代码如下:
library(shiny)
library(rhandsontable)
library(data.table)
X = c("","","")
Y = c("","","")
daten = data.table(X, Y)
ui <- fluidPage(
rHandsontableOutput("tabelle"),
plotOutput("grafik")
)
server <- function(input, output) {
data <- reactiveValues(values=daten)
output$tabelle <- renderRHandsontable({
rhandsontable(data$values)
})
observeEvent(input$tabelle, {
data$values <- hot_to_r(input$tabelle)
})
output$grafik <- renderPlot({
if(is.null(data$values)) return(NULL)
plot(data$values)
})
}
shinyApp(ui, server)
该应用程序正常运行,但显示错误消息
Warning: Error in plot.window: need finite 'xlim' values
在控制台中,并在浏览器窗口中显示错误消息:
Error: need finite 'xlim' values
将数据粘贴到表中时,错误消息消失。
我认为错误是由于首次调用plot函数时缺少数据所致。在github上,我找到了添加
if(is.null(data$values)) return(NULL)
在renderPlot函数中,但不幸的是,这没有帮助。
如果有人可以帮助我创建一个带有rhandsontable的空表,并且可以通过复制和粘贴将数据填充进去,我将非常高兴。
答案 0 :(得分:0)
我知道您很早以前就问过这个问题,但是由于到目前为止还没有提供解决方案,所以让我提出一个解决方案。
要回答您的主要问题:为什么会收到错误消息
Warning: Error in plot.window: need finite 'xlim' values
?
答案是:因为您要求R
绘制没有值的东西。您测试if(is.null(data$values))
。这可能是一个解决方案。但是,您设置了data$values <- hot_to_r(input$tabelle)
。因此,它不是NULL
。
我可以建议如下更改代码(尤其是因为data
是内置的data
函数,因此将R
用于输入值会产生误导):>
library(shiny)
library(rhandsontable)
library(data.table)
X <- c("", "", "")
Y <- c("", "", "")
daten <- data.table(X, Y)
ui <- fluidPage(
rHandsontableOutput(outputId = "tabelle"),
plotOutput(outputId = "grafik")
)
server <- function(input, output){
data.in <- reactiveValues(values = daten)
output$tabelle <- renderRHandsontable({
rhandsontable(data.in$values)
})
observeEvent(eventExpr = input$tabelle, {
data.in$values <- hot_to_r(input$tabelle)
output$grafik <- renderPlot({
if(!is.null(tryCatch(plot(data.in$values), error = function(e){})))
{plot(data.in$values)}
})
})
}
shinyApp(ui, server)
tryCatch
允许您评估表达式,检查是否发生错误,如果是,则error = function(e){}
丢弃NULL
而什么也没有发生,如果没有,则将出现图。