2016-05-11 20 views
0

Ich erhalte einen Fehler, wenn ich den Code nur in shiny-server ausführe. Wenn ich den gleichen Code mit der runApp() - Funktion von der R-Konsole aus starte, läuft er gut. Siehe untenstehende Fehlermeldung ....shiny-server: Variablennamen sind auf 10000 Bytes begrenzt

Warning: Error in assign: variable names are limited to 10000 bytes 
Stack trace (innermost first): 
    46: assign 
    45: wrapFunctionLabel 
    44: public_bind_env$initialize 
    43: Observable$new 
    42: reactive 
    41: templateServer 
    40: server [/home/shiny-apps/ACCPlantAnalysis/server.R#20] 
    1: runApp 
Error in assign(name, func, environment()) : 
    variable names are limited to 10000 bytes 

Zeile Nr. 41 und 40 werden von mir geschrieben. aber andere Zeilen sind nicht von mir geschrieben; Aufruf von einer beliebigen Referenzbibliothek. Ich weiß nicht, aus welcher Bibliothek.

+1

könnten wir uns Ihren Code ansehen? – AHC

+0

Der Fehler ist klar. Haben Sie den Verdacht, dass Sie irgendwo in Ihrem Code einen sehr langen Variablennamen haben? Wenn ja, versuche es zu beheben. – nicola

+0

Nicht in meinem Code .... der Fehler wurde von einer Bibliothek angezeigt. Ich habe keinen langen Variablennamen verwendet. Meine Variablennamen sind nur 8-10 Byte lang. Auch derselbe Code läuft von der R-Konsole. Warum? –

Antwort

0

Endlich habe ich eine Lösung. Ich habe für jeden 'if'-Block Funktionen geschrieben und den gesamten Code von' if 'in die Funktion eingefügt. Dann rufe die Funktion an. Und das war Problem gelöst.

SectoralLeverageRatio(){ 
... 
... 
} 

if (selectedIndex=="Sectoral Leverage Ratio"){ 
    SectoralLeverageRatio() 
} 

Die Schlussfolgerung ist, ... wenn Ihr ‚wenn‘ Block groß genug ist, und Sie haben Fehler ‚Variablennamen werden auf 10000 Bytes begrenzt.‘ Ersetzen Sie den Code innerhalb des 'if' Blocks durch eine benutzerdefinierte Funktion.

Dies ist das Problem von shiny-server; nicht das Problem von 'R'. Wenn Sie Ihren Code über die R-Konsole mit runApp() ausführen, erhalten Sie keinen Fehler. Aber wenn Sie (Produktionsumgebung) durchlaufen, erhalten Sie möglicherweise einen Fehler.

0

Nach ?name, müssen Sie die Tatsache respektieren, dass:

Namen auf 10.000 Bytes beschränkt sind (und waren auf 256 Bytes in Versionen von R vor 2.13.0).

und die Regel sagt in ?make.names:

Ein syntaktisch gültiger Name Buchstaben besteht, Zahlen und dem Punkt oder Unterstrichen und beginnt mit einem Buchstaben oder dem Punkt gefolgt nicht durch eine Zahl. Namen wie ".2way" sind nicht gültig, und auch die reservierten Wörter sind nicht gültig.

+0

Aber ich habe diesen Code nicht geschrieben. Dieser Code wurde von einigen der Bibliothek aufgerufen. Wenn ich diesen Fehler mache, wird der gleiche Fehler auch von der R-Konsole angezeigt. –

+0

URL: http://stat-tools.zivanta-analytics.com/apps/ACCPlantAnalysis/ –

0

Nach einem Tag lang Forschung kann ich das Problem lokalisieren. Ich habe einen langen if..else Block in meinem Code. Es gibt 10 if Block und jeder if Block hat mindestens 6-8 Codezeilen. Wenn ich einen Kommentar ‚wenn‘ Codeblock (zufällig ausgewählt) den Code läuft fantastisch .... unter meiner ist ‚wenn‘ Codeblock ...

else if (selectedIndex=="Sectoral Leverage Ratio"){ 
     ## Calculated number of row of the matrix ## 
     rowNum <- selectedMonth[2] - selectedMonth[1] + 1 

     ## Filter data based on criteria ## 
     filteredData <- subset(rawData,Year %in% selectedYear & Month %in% selectedMonth[1]:selectedMonth[2] & Plant %in% selectedPlant) 

     LeverageTable <- filteredData[,c('sch1ExpLeverage','sch2ExpLeverage','sch3ExpLeverage','sch4ExpLeverage','sch5ExpLeverage','sch7ExpLeverage','sch10ExpLeverage','sch11ExpLeverage')] 
     LeverageSum <- apply(LeverageTable,2,sum) 

     ExpTable <- filteredData[,c('sch1Exp','sch2Exp','sch3Exp','sch4Exp','sch5Exp','sch7Exp','sch10Exp','sch11Exp')] 
     ExpSum <- apply(ExpTable,2,sum) 


     LeverageRatio <- as.matrix(LeverageSum/ExpSum) 
     AvgLeverageRatio <- as.matrix((LeverageSum/ExpSum)/rowNum) 

     LeverageRatioTable <- cbind(LeverageRatio,AvgLeverageRatio) 
     colnames(LeverageRatioTable) <- c('Leverage Ratio','Avg.Leverage Ratio') 


     LeverageRatioTable <- data.frame(Sector=c('Health & Sant.','Edn. & Voc.','Social Welfare','Envt. Sust.','Hrtg & Arts','Sports','Rural Dvpt.','Admin Cost'),LeverageRatioTable) 

     as.data.frame(LeverageRatioTable) 

    } 

Alle anderen ‚wenn‘ Blöcke sind fast ähnlich (mit etwas Unterschied in der Berechnung).

Dies ist das Problem von shiny-server; nicht das Problem von "R" selbst.

Wenn jemand meinen Code untersuchen möchte; Ich kann den vollständigen Code teilen.

Verwandte Themen