2016-07-14 5 views
3

Ich war in glänzend mit der rgl und shinyRGL-Paket Codierung, versuchen, ein 3D-Liniendiagramm plotten, indem die Benutzer eine csv Datei eines bestimmten Formats einfügen. Aber der Schließungsfehler des Objekttyps wird weiterhin angezeigt. Es scheint, als ob es die Funktion plot3d nicht finden kann, oder ich könnte falsch liegen.Objekt vom Typ 'Schließung' ist keine Teilmenge in glänzend. Arbeiten an einer einfachen RGL-Plotfunktion

Hier ist der Code:

UI

library(shiny) 
library(rgl) 
library(shinyRGL) 

# Define UI for application that draws a histogram 
shinyUI(fluidPage(
    titlePanel("title panel"), 

    sidebarLayout(
    sidebarPanel(
     helpText("Please select a CSV file with the correct format."), 
     tags$hr(), 
     fileInput("file","Choose file to upload",accept = c(
     'text/csv', 
     'text/comma-separated-values', 
     'text/tab-separated-values', 
     'text/plain', 
     '.csv', 
     '.tsv', 
     label = h3("File input")) 
    ), 
    tags$hr(), 
    checkboxInput('header', 'Header', TRUE), 

    actionButton("graph","PLOT!") 
    ), 


mainPanel(textOutput("text1"), 
      webGLOutput("Aplot"))) 
) 
) 

Server

library(shiny) 
library(rgl) 
library(shinyRGL) 

options(shiny.maxRequestSize = 9*1024^2) 
shinyServer(
    function(input, output) { 


    output$text1 <- renderText({ 
    paste("You have selected", input$select) 
    }) 
    output$"Aplot" <- renderWebGL({ 
     inFile <- reactive(input$file) 
     theFrames <- eventReactive(input$graph,read.csv(inFile$datapath, 
header = input$header)) 
plot3d(theFrames[[4]],theFrames[[5]],theFrames[[6]],xlab="x",ylab="y",zlab 
= "z", type = "l", col = ifelse(theFrames[[20]]>0.76,"red","blue")) 
    }) 
}) 

Fehler

Warning: Paket hinyRGL wurde unter R-Version gebaut 3.3.1 Warnung: Fehler in [[: Objekt vom Typ 'Schließung' subsettable nicht Stapelüberwachung (innerste zuerst): 70: plot3d 69: func [C: \ Benutzer \ Ian \ Arbeitsplatz \ Kopieren von Leap SDK/Test \ App_1/server.R # 19] 68: Ausgang $ einem Gelände 1: runapp

+0

Es ist nicht, dass es nicht die Funktion finden kann, dann ist es, dass irgendwo in diesen Funktionen Sie versuchen, einen Verschluss (eine Funktion) der Teilmenge, die offensichtlich nicht funktioniert. Versuchen Sie, dynamische Subset-Ausdrücke mit statischen Platzhaltern auszuwechseln (alles, von dem Sie wissen, dass die Funktion ausgeführt wird), damit Sie herausfinden können, welcher Begriff das Problem verursacht. – alistaire

+0

@alistaire Es scheint als wäre das Problem innerhalb meines XYZ-Parameters "theFrames [[...]]". Aber ich weiß nicht, was es verursacht oder wie ich es beheben kann. –

+0

Was ist 'str (theFrames)'? – alistaire

Antwort

5

diese Fehlermeldung Denken sie daran, da es sehr typisch für glänzende Anwendungen.

Es bedeutet fast immer, dass Sie einen reaktiven Wert hatten, aber nicht mit Klammern.

Code angeht, so entdeckte ich diesen Fehler hier:

inFile <- reactive(input$file) 
theFrames <- eventReactive(input$graph,read.csv(inFile$datapath, 
    header = input$header)) 

plot3d(theFrames[[4]],theFrames[[5]],theFrames[[6]],xlab="x",ylab="y",zlab 
    = "z", type = "l", col = ifelse(theFrames[[20]]>0.76,"red","blue")) 

Sie verwenden inFile wie eine normale Variable, aber es ist nicht. Es ist ein reaktiver Wert und muss daher mit inFile() aufgerufen werden. Das gleiche gilt für theFrames, die Sie mit theFrames[[i]] aufgerufen haben, aber mit theFrames()[[i]] aufgerufen werden sollten.

So ist die richtige Version

inFile <- reactive(input$file) 
theFrames <- eventReactive(input$graph,read.csv(inFile()$datapath, 
    header = input$header)) 

plot3d(theFrames()[[4]],theFrames()[[5]],theFrames()[[6]],xlab="x",ylab="y",zlab 
    = "z", type = "l", col = ifelse(theFrames()[[20]]>0.76,"red","blue")) 

Vielleicht sind einige zusätzliche Informationen über die Fehlermeldung wäre: Glänzendes nur die Variablen auswertet, wenn sie benötigt werden, so dass die reaktive theFrames, die den Fehler enthält, wird aus dem Inneren der ausgeführt plot3d Funktion. Aus diesem Grund sagt Ihnen die Fehlermeldung etwas über den Fehler in plot3d, auch wenn der Fehler woanders liegt.

+0

Ich habe den 'closure'-Fehler nach dem, was Sie gesagt haben, behoben, vielen Dank. Aber jetzt gibt es mir eine weitere Fehlermeldung Massage: 'Warnung: Fehler in <-: ungültige (NULL) linke Seite der Zuordnung Stack-Trace (innerste zuerst): 69: func [C: \ Benutzer \ Ian \ Arbeitsbereich \ Kopie von Leap SDK Test \ App_1/server.R # 15] 68: Ausgabe $ Aplot 1: runApp ' –

+0

@IANLee Dann haben Sie wahrscheinlich zu viele '()' s in Ihrem Code. Siehe die Antwort [hier] (http://stackoverflow.com/questions/35769388/reactives-invalid-null-left-side-of-assignment). –

0

Ich würde empfehlen, sollten Sie Ihre Namenskonventionen betrachten. Ich habe diesen Fehler immer gesehen, wenn ich Variablennamen wie Namen von Funktionen verwende, die in Paketen definiert sind, oder eine von mir definierte Funktion.

Zum Beispiel:

header = input$header 
inFile = input$file 

Sie sollten immer beschränken sich diese Art von Namen in Verwendung, wird es immer nützlich sein.

Thanks :)

Verwandte Themen