问题:如何释放R正在使用的所有文件处理程序/连接?在Python中,人们可以看看哪些对象仍然存在。 R中有什么可比的吗?
在一个函数中,我创建了一个包含一些文件的目录。在函数结束时,应该再次删除它。我面临的问题是我无法删除文件,大概是因为文件处理程序仍处于打开状态。示例是使用MetaSKAT包,但我对一般解决方案感兴趣。示例数据可在此处找到:https://groups.google.com/group/skat_slee/attach/28a76339619d8358/Datasets.zip?part=4&authuser=0
# Code author: Seunggeun (Shawn) Lee
setwd('./Datasets')
foo <- function(dir.name) {
###### Preparation stuff ################################################
if (!require(MetaSKAT)) {install.packages('MetaSKAT'); require(MetaSKAT)}
dir.create(file.path('.',dir.name),showWarnings=F)
dir.path <- paste("./",dir.name,sep="")
file.copy(c("01.fam","01.bed", "01.bim", "01_3.SetID"), dir.path)
setwd(dir.path)
FAM<-read.table("01.fam", header=FALSE)
y<-FAM[,6]
N.Sample<-length(y)
x1<-rnorm(N.Sample)
x2<-rbinom(N.Sample,1, 0.5)
obj <-SKAT_Null_Model(y~cbind(x1, x2))
re <-Generate_Meta_Files(obj, "01.bed", "01.bim", "01_3.SetID", "01.MSSD", "01.MInfo", N.Sample)
###### Problem #######################################################
print(file.remove(list.files(), force = T)) # problem: cannot delete
# curiously, sometimes there is 1, sometimes 2 False...
###### my different tries to solve it ################################
rm(re)
closeAllConnections()
sink.number() # shows 0
rm(list = ls())
gc()
###### problem is still there ######################################
print(file.remove(list.files()))
setwd('..')
# print(unlink(dir.path, recursive = T)) # I want finally delete the directory
}
debug(foo)
foo("temp2")
我正在使用R Studio。即使在R仍处于打开状态时尝试在Windows中手动删除它,它也会告诉我该文件是由程序使用的。我只能在关闭R后删除它。
那么如何强制R释放这些文件呢?我将尝试在根目录下解决问题并查看Generate_Meta_Files()的源代码,但我认为R中必须有一个全局函数强制释放所有内容(注意:我很清楚它没有意义为了创建文件并在之后直接删除它,这只是一个例子。)
编辑:提示后,我在Linux下尝试了。事实证明,虽然它告诉我删除一个(6个)文件有问题,所有都被正确删除,因此我想这是一个特定于Windows的问题。有什么提示这是什么?