变量名称限制为10000字节

问题描述 投票:0回答:3

我仅在闪亮服务器中运行代码时遇到错误。当我使用 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行是我写的。但其他几行不是我写的;从任何参考库调用。不知道是哪个图书馆的。

r shiny-server
3个回答
2
投票

终于找到解决方案了。我为每个“if”块编写了函数,并将“if”块的所有代码放入函数内。然后调用该函数。问题就解决了。

SectoralLeverageRatio(){
...
...
}

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

结论是...如果您的“if”块足够大,并且您收到“变量名称限制为 10000 字节”错误。将“if”块内的代码替换为用户定义的函数。

这是shiny-server的问题;不是“R”的问题。如果您使用 runApp() 从“R”控制台运行代码,则不会收到任何错误。但如果你运行(生产环境)你可能会得到一个错误。


0
投票

根据

?name
,你必须尊重以下事实:

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

规则在

?make.names
中说:

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


0
投票

经过一天的研究,我能够查明问题所在。我的代码中有一个很长的 if..else 块。有 10 个 if 块,每个 if 块至少有 6-8 行代码。当我评论一个“if”代码块(随机选择)时,代码运行得非常好......下面是我的“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)

  }

所有其他“if”块几乎相似(计算上有一些差异)。

这是shiny-server的问题;不是“R”本身的问题。

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

© www.soinside.com 2019 - 2024. All rights reserved.