问题描述
背景
我正在我的计算机 (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 中。
路障
我调查了包 xlsx
、openxlsx
(似乎存在一些稳定性问题)和 XLConnect
。尽管 XLConnect
似乎特别相关(请参阅 XLConnect::appendWorksheet()
)并且即使跨操作系统也可移植,但仍然存在 Java 的问题。目前,pacman::p_load()
将成功安装 XLConnect
和 xlsx
(以及其他),但任何加载这两个包(通过 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 (将#修改为@)