2017-05-09 5 views
0

Ich habe ein seltsames Verhalten von rhandsontable in einer glänzenden App beobachtet. In diesem einfachen Beispiel weise ich ein data.frame einem reactiveValues Element zu, wenn ein Ereignis eintritt. Die Daten werden dann in einer rhandsontable angezeigt. Aber wenn ich einigen Eintrag der Tabelle ändern hot_to_r die Funktion fehlschlägt mit: Fehler in seq.default: Argument ‚length.out‘ muss die Länge 1Fehler bei der Verwendung von rhandsontable in Shiny

Seltsamer der Fehler tritt nur auf, wenn ich iris verwenden, aber nicht wenn ich iris[1:50, ] verwende, sollte das identisch sein. Hat jemand eine Idee, wie man das beheben kann?

(Es gibt einen weiteren Fehler, wenn values$data noch ist NULL vor der actionButton geklickt wird. Ich bin dafür bekannt ist, aber dies ist für die Frage nicht relevant.)

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) 
+0

Ich denke, der Fehler kommt von der Übertragung der Daten. Überprüfen Sie: 't (Kopf (Iris))'. Warum transponieren Sie, um die Tabellenausgabe anzupassen? – BigDataScientist

+0

Der data.frame, den ich gerade benutze, hat nur eine Zeile, also denke ich, dass die Tabellenausgabe besser transponiert aussieht. Und das passt besser in ein Säulendesign, wenn ich andere ui-Elemente neben dem Tisch haben möchte. – needRhelp

+0

Sie können den geänderten Datensatz mit 'as.data.frame (do.call (rbind, Eingabe $ table $ data))' abrufen – HubertL

Antwort

1

@BigDataScientist auf etwas ist colnames(t(iris)) ist NULL, während colnames(t(iris[1:50,])) nicht ist. Das ist ein Mysterium für mich, aber zu verhindern, dass Nichtigkeit Ihr Problem lösen sollte. Verwenden Sie etwas in den Anruf an rhandsontable sollte den Trick tun. Mit

rhandsontable(data.frame(t(values$data))) 

arbeitete für mich.

Verwandte Themen