重复数据。表fread和fwrite原因“;“拒绝许可”;错误
我使用重复数据。表fread和fwrite原因“;“拒绝许可”;错误,r,data.table,permission-denied,r-4.0.0,R,Data.table,Permission Denied,R 4.0.0,我使用data.tablefwrite()和fread()函数在并行计算中管理资源时遇到了这个问题,但也能够在下面的顺序示例代码中重新创建行为。调用fwrite()会引发以下错误: fwrite(dt,csv_路径)中出错:权限被拒绝:“D:/mypath/test.csv”。无法打开 用于写入的现有文件。你有书面许可吗?这是吗 Windows和其他进程(如Excel)是否已将其打开 该行为似乎与前面调用的fread()有关,因为注释掉fread()命令会使错误消失。根据您的系统,您可能必须在错
data.table
fwrite()
和fread()
函数在并行计算中管理资源时遇到了这个问题,但也能够在下面的顺序示例代码中重新创建行为。调用fwrite()
会引发以下错误:
fwrite(dt,csv_路径)中出错:权限被拒绝:“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)
}
系统信息
R版本4.0.0(2020-04-24)
平台:x86_64-w64-mingw32/x64(64位)
运行于:Windows Server x64(内部版本14393)
数据表1.12.8
我在Windows计算机上尝试了你的代码,但无法复制 我相信这个问题与Windows文件处理程序有关,它似乎不够快,无法在再次打开之前关闭文件连接 您可以尝试以下代码,以查看它是否仅在R中可复制:
x=“a,b\n1,a\n2,b\n”
csv\u path=“D:/mypath/test.csv”
创建(csv_路径)
f=文件(csv_路径,“w”)
cat(x,文件=f)
关闭(f)
对于(1:10000中的i){
f=文件(csv_路径,“r”)
测试=读线(f)
关闭(f)
f=文件(csv_路径,“w”)
cat(x,文件=f)
关闭(f)
}
<> P>什么也可以理解,<>代码> sys >睡眠>代码>足以使问题消失。如果在中间放置<代码> sys >睡眠(0.001)有帮助吗?可能windows文件处理程序的速度不够快,无法在使用fread读取文件后关闭该文件?睡眠时间为1 ms时,错误仍会发生,但发生的频率似乎较低。我想增加睡眠时间可以消除这个错误,但也会增加计算的运行时间。令我惊讶的是,使用
read.csv()
和write.csv()
组合使用,代码永远不会抛出错误,这让我认为它与data.table
包有关。我只是让它在Mac上再次运行398378
迭代。必须是在linux(BTRFS)上运行良好的windows thingRuns。几乎可以肯定是Windows文件系统问题(文件关闭速度不够快),与data.table无关。write.csv
在实际打开文件连接之前会做很多事情。这些东西花费的时间比你所关心的微秒还要多。