Я запускаю скрипт, который загружает несколько файлов. По достижении 50 загруженных файлов я получаю сообщение об ошибке «все соединения используются».Закрытие соединений read.table в R
Я понял, что мне нужно закрыть соединения, но я столкнулся со следующей проблемой.
con = file(paste('/home/rstudio/userstats/',cuserid,'.tsv',sep=""))
userstats_current = read.table(con, sep="\t", header=0, quote="", stringsAsFactors=F)
close(con)
Error in close.connection(con) : invalid connection
Если я печатаю следующее, однако все работает отлично:
con = file(paste('/home/rstudio/userstats/',cuserid,'.tsv',sep=""))
close(con)
ли произойдет что-то соединения, когда применяется read.table и как я могу управлять, чтобы закрыть эти соединения?
ОБНОВЛЕНИЕ
Благодарим за ответы. Проблема в том, что когда я запускаю цикл foreach даже с одним ядром через некоторое время, я продолжаю получать эту ошибку всех подключений.
registerDoMC(2)
matrix <- foreach(i=1:nrow(sample), .combine=rbind) %dopar% {....}
Может быть, когда он читает в EOF (конец файла) автоматически закрывается? В документации для open говорится: «В общих функциях, использующих соединения, они будут открываться, если они не открыты, но затем снова закройте их, чтобы явное закрытие открытого вызова соединения». – Frank
Вместо того, чтобы явно создавать соединение, почему бы просто не передать имя файла 'read.table'? В общем, R достаточно умен, чтобы закрыть соединения, которые он открывает. –
Это работает для меня с 1000 файлами, поэтому я подозреваю, что проблема кроется в другом месте (например, в RStudio?). 'x <- list(); для (i в 1: 1000) {fn <- paste0 ("z", i); написать (rnorm (5), fn); f <- файл (fn); x [[i]] <- read.table (f)} ' –