我在仅在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号线是我写的。但其他行不是我写的;从任何参考图书馆打电话。我不知道从哪个图书馆。
答案 0 :(得分:0)
根据?name
,您必须尊重以下事实:
名称限制为10,000个字节(在2.13.0之前的R版本中为256个字节)。
并且规则在?make.names
中说明:
语法上有效的名称由字母,数字和点或组成 下划线字符并以字母或点开头未跟随 一个数字。诸如“.2way”之类的名称无效,也不是 保留字。
答案 1 :(得分:0)
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”控制台运行代码,则不会出现任何错误。但是如果你运行(生产环境),你可能会收到错误。