Я знаю, что вы задавали этот вопрос довольно давно, но поскольку пока что не найдено решение, позвольте мне предложить одно.
Чтобы ответить на ваш главный вопрос: почему вы получаете сообщение об ошибке
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
и ничего не происходит, если нет, тогда будет график.