Jan*_*ndt 5 r permission-denied data.table r-4.0.0
我使用data.table fwrite()和fread()函数在并行计算中管理资源时遇到了这个问题,但也能够在下面的顺序示例代码中重新创建行为。调用fwrite()会引发以下错误:
fwrite(dt, csv_path) 中的错误:权限被拒绝:'D:/mypath/test.csv'。无法打开现有文件进行写入。你有写权限吗?这是 Windows 吗?Excel 等其他进程是否打开了它?
该行为似乎与fread()之前的调用有关,因为注释掉fread()命令会使错误消失。根据您的系统,您可能必须在错误发生之前增加迭代次数,因为它发生在不同的迭代次数上。
有谁知道为什么会这样?提前感谢你的帮助!
示例代码:
library(data.table)
dt = data.table(a = c(1, 2), b = c("a", "b"))
csv_path = "D:/mypath/test.csv"
fwrite(dt, csv_path)
for(i in 1:10000){
test = fread(csv_path)
fwrite(dt, csv_path)
}
Run Code Online (Sandbox Code Playgroud)
系统信息
R 版本 4.0.0 (2020-04-24)
平台:x86_64-w64-mingw32/x64(64位)
运行于:Windows Server x64(内部版本 14393)
data.table_1.12.8
我在 Windows 机器上尝试了你的代码,但无法重现它。
我相信这个问题与 Windows 文件处理程序有关,它似乎不够快,无法在再次打开文件连接之前关闭它。
您可以尝试以下代码,看看它是否可以在 R 中重现:
x = "a,b\n1,a\n2,b\n"
csv_path = "D:/mypath/test.csv"
file.create(csv_path)
f = file(csv_path, "w")
cat(x, file=f)
close(f)
for (i in 1:10000) {
f = file(csv_path, "r")
test = readLines(f)
close(f)
f = file(csv_path, "w")
cat(x, file=f)
close(f)
}
Run Code Online (Sandbox Code Playgroud)
同样有意义的是看看多少Sys.sleep足以让问题消失。
| 归档时间: |
|
| 查看次数: |
412 次 |
| 最近记录: |