Rstudio 拥有 Excelfile 权限 - XLconnect

Err*_*ard 4 r rjava xlconnect

自从我昨天更新了 RStudio 以来,我无法让 Rstudio 放弃它对我的 excelfiles 的保留。

我尝试了以下方法无济于事:

  unlink(fileName, recursive = TRUE)
  file.info(fileName)
  file.remove(fileName)
Run Code Online (Sandbox Code Playgroud)

file.info 提供以下内容:

size 2383465
isdir FALSE
mode 666
mtime 2020-08-06 11:02:03
ctime 2020-06-16 13:00:22
atime 2020-08-06 10:40:30
exe no
Run Code Online (Sandbox Code Playgroud)

RStudio 由管理员安装,但我个人在我的组织中没有管理员权限。即使取消链接也不允许 file.remove (但它不是目录所以......)。而且我真的不想删除它,只需让 Rstudio 取消保留即可。该文件将在 Excel 中修改(并保存,这是不允许的,因为 RStudio 持有它)。

更新:

我想这是一个错误,所以到目前为止我所有的谷歌搜索都没有找到解决方案。我想可以解决这个问题的一种解决方法是,如果我可以以编程方式重新初始化 JVM 实例。(例如, .rs.restartR()删除文件上的 R:s 保留)

更新 2:

openxlsx-package 发生了完全相同的错误,它不依赖于 Java,因此问题可能出在 R 上。

R version 3.6.3 (2020-02-29)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 18362)

Matrix products: default

locale:
[1] LC_COLLATE=Swedish_Finland.1252  LC_CTYPE=Swedish_Finland.1252    LC_MONETARY=Swedish_Finland.1252
[4] LC_NUMERIC=C                     LC_TIME=Swedish_Finland.1252 
Run Code Online (Sandbox Code Playgroud)

更新 3:

这里仍然没有突破,我已经用一些hacky-code解决了锁,但它至少解决了眼前的问题:

  .rs.restartR()
  source("~/.Rprofile")
Run Code Online (Sandbox Code Playgroud)

更新 4:

如果我这样做:

library(XLConnect)

wb <- loadWorkbook("Cars.xlsx", create = TRUE)
createSheet(wb, "Data")
writeWorksheet(wb, cars, "Data")
saveWorkbook(wb)
Run Code Online (Sandbox Code Playgroud)

第一次打开文件时,我可以在不关闭 R 会话的情况下进行保存。如果我这样做,打开 Excel 文件并保存,然后重新运行上面的代码,我的 R 会话持有权限锁。所以它在文件保存的范围内有一些东西。

更新 5:

这现在是一个未解决的问题,可能是仅限 Windows 的错误:

Github - XLconnect

Err*_*ard 5

XLconnect 中的以下函数调用清除 Java 会话:

xlcFreeMemory()
Run Code Online (Sandbox Code Playgroud)

gc()本身不起作用,但xlcFreeMemory也运行下面的代码,我想这就是交易的关键:

J("java.lang.Runtime")$getRuntime()$gc()
Run Code Online (Sandbox Code Playgroud)