可移植地将 R 数据附加到 Excel 表格无需覆盖

问题描述

背景

我正在我的计算机 (Windows) 上编写一个 .R 脚本,(1) 必须维护一个 Log.xlsx 文件记录其运行数据;并且 (2) 将由同事在单独的 VM(也是 Windows)上运行。

要求

我正在 R 中寻找一个包,该包将 (1) 让我在最后一个非空行之后立即附加 R 数据(来自 data.frame),在现有工作表中现有的 Log.xlsx 工作簿;而 (2) 保持易于移植,因此如果 VM 尚未安装任何必要的软件包,脚本本身(通过 pacman::p_load()*)可以自动安装它们。

* 我使用 pacman 功能确保 base 的存在:

if(!"pacman" %in% installed.packages()) {
    install.packages("pacman")
}

偏好

由于这个日志会快速增长——脚本每天运行,每次运行会记录几十条记录——我宁愿避免建议的方法 here,它只是将所有现有的工作表数据加载到 R 中,其中它组合数据集,然后(覆盖)将结果写入新的 .xlsx(或 .csv文件。我同样希望避免提出的(更好?)方法 here,它类似地加载和组合 R 中的所有内容,但随后覆盖工作簿的工作表,而不是覆盖工作簿本身。

简而言之,我非常喜欢“粒度可附加性”,只需将新数据添加到现有工作表的末尾,而无需加载、组合和(覆盖)写入整个工作表(更不用说工作簿)的数据在 R 中。

路障

我调查了包 xlsxopenxlsx(似乎存在一些稳定性问题)和 XLConnect。尽管 XLConnect 似乎特别相关(请参阅 XLConnect::appendWorksheet())并且即使跨操作系统也可移植,但仍然存在 Java 的问题。目前,pacman::p_load() 将成功安装 XLConnectxlsx(以及其他),但任何加载这两个包(通过 library())的尝试都会导致

Error: package or namespace load Failed for ‘xlsx’:
 .onLoad Failed in loadNamespace() for 'rJava',details:
  call: fun(libname,pkgname)
  error: JAVA_HOME cannot be determined from the Registry

我显然可以在我的计算机上更正此问题,方法是按照说明 here 安装 Java 版本(32 位或 64 位)与我的 R 版本兼容。但是,我希望保持脚本自包含,以便它处理自己的依赖项并在 VM 上轻松运行,无论虚拟机上安装了哪些“位版本”的 R 和 Java。特别是,我不想强​​迫我的同事手动安装相应版本的 Java。

总结

虽然 second solution(显然避免了 Java 障碍)会在真正的紧要关头发挥作用,但对于实现我列出的首选项的任何帮助将不胜感激!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)