2017-07-13 4 views
1

Ich versuche, zwei neue Spalten zu einem Datenrahmen in glänzend hinzuzufügen. Ich erhalte derzeit den Fehler invalid 'envir' argument of type 'closure', aber ich bin mir nicht sicher warum.Hinzufügen zu einem Datenrahmen in glänzend

Mein server.R Code ist:

server <- function(input, output) { 

    inFile <- reactive({input$file1}) 

    data <- reactive({ 
    if (is.null(inFile())) return(NULL) 
    read.xlsx2(inFile()$datapath, 
       1, 
       sheetName=NULL, 
       colIndex = c(1:7), 
       header = TRUE) 
    }) 

    z_scores <- reactive({ 
    if (is.null(inFile())) return(NULL) 
    with(data, ave(as.numeric(data$Raw.Score), data$Reader.Name, FUN=scale)) 
    }) 

    percentile <- reactive({ 
    if (is.null(inFile())) return(NULL) 
    format(pnorm(data$z_scores) * 100, scientific = FALSE) 
    }) 

    processedData <- reactive({ 
    if (is.null(inFile())) return(NULL) 
    cbind(
     data(), 
     z_score = z_scores(), 
     percentile = percentile() 
    ) 
    }) 

    output$view <- renderDataTable(
    processedData(), 
    options = list(pageLength = 10) 
) 

} 

mein ui.R Code ist:

ui <- shinyUI(fluidPage(
    sidebarLayout(
     sidebarPanel(
      fileInput("file1", "Choose XLSX File", accept = ".xlsx"), 
      checkboxInput("header", "Header", TRUE) 
    ), 
     mainPanel(
     dataTableOutput("view") 
    ) 
    ) 
)) 

Was muss ich tun, um diesen Fehler zu vermeiden? Ich bin mir nicht einmal sicher, was es mir zu sagen versucht.

Dank

Antwort

1

Der folgende Code funktioniert mit diesem Datensatz

myDat <- data.frame(
    z_scores = rnorm(10), Raw.Score = rnorm(10), 
    Reader.Name = sample(letters,10)) 
file <- paste("inputfile", "xlsx", sep=".") 
write.xlsx(myDat, file = file) 

Es scheint, dass Sie den Blindwert data falsch verwendet. Wenn Sie auf den aktuellen Wert eines reaktiven Objekts zugreifen möchten, müssen Sie data() oder data()$column_name verwenden. Ich rate Ihnen auch dringend, Ihre variable Benennung zu überdenken. data ist eine Funktion von utils, die Datensätze aus Bibliotheken lädt. Das Überschreiben dieser Funktion kann manchmal zu sehr merkwürdigem Verhalten führen.

server <- function(input, output) { 

    inFile <- reactive({input$file1}) 

    data <- reactive({ 
    if (is.null(inFile())) return(NULL) 
    read.xlsx2(inFile()$datapath, 1, sheetName = NULL, 
       colIndex = c(1:7), header = TRUE) 
    }) 

    z_scores <- reactive({ 
    if (is.null(inFile())) return(NULL) 
    with(data(), ave(as.numeric(data()$Raw.Score), data()$Reader.Name, FUN = scale)) 
    }) 

    percentile <- reactive({ 
    if (is.null(inFile())) return(NULL) 
    format(pnorm(as.numeric(data()$z_scores)) * 100, scientific = FALSE) 
    }) 

    processedData <- reactive({ 
    if (is.null(inFile())) return(NULL) 
    cbind(
     data(), 
     z_score = z_scores(), 
     percentile = percentile() 
    ) 
    }) 

    output$view <- renderDataTable(
    { processedData() }, 
    options = list(pageLength = 10) 
) 

} 

ui <- shinyUI(fluidPage(
    sidebarLayout(
    sidebarPanel(
     fileInput("file1", "Choose XLSX File", accept = ".xlsx"), 
     checkboxInput("header", "Header", TRUE) 
    ), 
    mainPanel(dataTableOutput("view")) 
) 
)) 

shinyApp(ui, server) 
+0

Danke ... immer noch einen Fehler, aber es scheint zu meinen Daten verwandt zu sein. Argumente bedeuten eine unterschiedliche Anzahl von Zeilen: 11764, 0 Wie gehst du vor, glänzende Anwendungen in Rstudio zu debuggen? Wenn ich einen Stop auf 26 setze, der die problematische Linie zu sein scheint, erhalte ich keine Informationen über die Variablen an diesem Punkt im Umgebungsbereich. – agf1997

+0

Ich benutze 'print' Statemets zum Debuggen. Es scheint, dass 'z_scores()' oder 'percentile()' 'NULL' (für Ihr Dataset) zurückgibt. Ich fürchte, ohne deine eigentlichen Daten kann ich nichts mehr vorschlagen. –

Verwandte Themen