shiny-server:变量名限制为10000字节

时间:2016-05-11 11:49:48

标签: r shiny-server shinydashboard

我在仅在shiny-server中运行代码时遇到错误。当我使用runApp()函数从R控制台运行相同的代码时,它运行良好。请参阅下面的错误消息....

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

41号线和40号线是我写的。但其他行不是我写的;从任何参考图书馆打电话。我不知道从哪个图书馆。

3 个答案:

答案 0 :(得分:0)

根据?name,您必须尊重以下事实:

  

名称限制为10,000个字节(在2.13.0之前的R版本中为256个字节)。

并且规则在?make.names中说明:

  

语法上有效的名称由字母,数字和点或组成   下划线字符并以字母或点开头未跟随   一个数字。诸如“.2way”之类的名称无效,也不是   保留字。

答案 1 :(得分:0)

经过一天的研究,我能够确定问题所在。我的代码中有一个很长的if..else块。如果块有10个,则每个if块至少有6-8行代码。当我评论一个' if'代码块(随机选择)运行奇妙的代码....下面是我的'如果'代码块...

  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)

  }

所有其他&#39;如果&#39;块几乎相似(在计算上有一些差异)。

这是闪亮服务器的问题;不是&#39; R&#39;本身。

如果有人想检查我的代码;我可以分享完整的代码。

答案 2 :(得分:0)

最后我得到了解决方案。我为每个'if'块编写函数,并将'if'块的所有代码放在函数中。然后调用该函数。问题就解决了。

SectoralLeverageRatio(){
...
...
}

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

结论是......如果你的'if'块足够大并且'变量名称限制为10000字节'错误。用用户定义的函数替换'if'块中的代码。

这是闪亮服务器的问题;不是'R'的问题。如果使用runApp()从“R”控制台运行代码,则不会出现任何错误。但是如果你运行(生产环境),你可能会收到错误。