Редактировать:
Я начинаю с моего отредактированного ответа, так как он более элегантный. Это использует команду оболочки, чтобы проверить, доступен ли файл, как обсуждено в этом вопросе:
Как проверить в командной строке, заблокирован ли данный файл или каталог (используется каким-либо процессом)?
Это позволяет избежать загрузки и сохранения файла и поэтому является более эффективным.
# Function to test availability
IsInUse <- function(fName) {
shell(paste("( type nul >> ", fName, " ) 2>nul && echo available || echo in use", sep=""), intern = TRUE)=="in use"
}
# Test availability
IsInUse("test.txt")
Оригинальный ответ:
Интересный вопрос! Я не нашел способа проверить, используется ли файл, прежде чем пытаться записать в него файл. Решение, приведенное ниже, далеко не элегантно. Он полагается на функцию tryCatch, а также на чтение и запись в файл, чтобы проверить, доступен ли он (который может быть довольно медленным в зависимости от размера вашего файла).
# Function to check if the file is in use (relies on reading and writing which is inefficient)
IsInUse <- function(fName) {
rData <- read.csv(fName)
tryCatch(
{
write.csv(rData, file=fName, row.names = FALSE)
return(FALSE)
},
error=function(cond) {
return(TRUE)
}
)
}
# Loop to check if file is in use
while(IsInUse(fName)) {
print("Still in use")
Sys.sleep(0.1)
}
# Your action here
Я также нашел ответ на этот вопрос полезным Как написать trycatch в R , чтобы понять функцию tryCatch.
Мне было бы интересно узнать, есть ли у кого-нибудь еще более элегантное предложение!