0

我管理许多 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 代码。那么,从头开始 - 我该如何调查这个“环境”错误?如果你在我的鞋子里,你会怎么做?我已经为此工作了几天,我很困惑。

如果它能为比我更有眼光的程序员提供更好的上下文,我很乐意提供额外的信息:)

4

1 回答 1

0

更新:事实上,我之前的回答(如下)并没有修复这个间歇性错误(正如 OP 指出的那样,由于 Java 依赖关系,它很难解开)。相反,我按照这里给出的建议从XLConnect包迁移到openxlsx,这完全回避了这个问题。

以前的答案:我一直对这个错误感到沮丧一段时间,包括在编写工作簿时明显的间歇性和 R 的捆绑几分钟。

我刚刚意识到问题所在:Excel 工作表名称的长度似乎限制为 31 个字符,而我的 R 代码生成的工作表名称超出了此限制。

为了清楚起见,我指的是 Excel 工作簿中各个选项卡式工作表的名称,而不是工作簿本身的文件名。

将每个工作表名称修剪为不超过 31 个字符为我修复了此错误。

于 2016-05-30T20:03:52.467 回答