我管理许多Excel报告,并使用R进行预处理并编写输出报告。这很棒,因为我所要做的就是运行R函数并分发报告,而报告编写的其余部分都是非活动时间。报告需要采用Excel格式,因为这是最容易传播的格式,而且受众众多且不是技术性的。一旦对数据进行了预处理,我就可以非常非常简单地使用XLConnect完成这项工作:
file.copy(from = template,
to = newFileName)
writeWorksheetToFile(file = newFileName,
data = newData,
sheet = "Data",
clearSheets = T)然而,当我尝试写入新数据时,我的一个报告开始抛出这个错误:
Error in ls(envir = envir, all.names = private) :
invalid 'envir' argument此外,在抛出错误之前,函数会占用R 15分钟。正常写入时间小于10秒。我必须承认,我甚至不明白这个错误是什么意思,它没有屈从于我通常的调试方法或任何其他SO解决方案。
我注意到其他人提到了rJava (重新安装这个包不起作用)和日志文件的Java缓存(不确定它在Mac上的位置)。我尤其感到困惑,因为前一天使用完全相同的过程运行报告没有任何问题,而我使用完全相同的过程的其他报告仍然工作得很好。
我没有更新Java、R或我的操作系统,也没有调试/重写任何R代码。因此,从头开始-我如何调查这个'envir‘错误?如果你处在我的位置,你会怎么做?我已经在这上面工作了几天了,我被难住了。
我很乐意提供额外的信息,如果它能为比我更有洞察力的程序员提供更好的上下文:)
发布于 2016-05-31 04:03:52
更新:事实上,我之前的回答(下面)并没有修复这个间歇性错误(正如OP指出的那样,由于Java依赖关系,这个错误很难取消)。相反,我听从了给here的建议,从XLConnect包迁移到了openxlsx,这完全避免了这个问题。
之前的回答:我已经对这个错误感到沮丧了一段时间,包括明显的间歇性和写工作簿时几分钟的R捆绑。
我刚刚意识到问题出在哪里: Excel工作表的名称长度似乎被限制在31个字符以内,而我的R代码生成的工作表名称超过了这个限制。
为了清楚起见,我指的是Excel工作簿中各个选项卡表的名称,而不是工作簿本身的文件名。
将每个工作表名称修剪为不超过31个字符已修复此错误。
https://stackoverflow.com/questions/37277952
复制相似问题