Как проверить размер файла перед открытием в R

Как я могу проверить размер файла, прежде чем загружать его в R?

Например:

http://math.ucdenver.edu/RTutorial/titanic.txt

Я бы хотел использовать оптимальную команду для открытия файла на основе размера файла.

Ответ 1

library(RCurl)
url = "http://math.ucdenver.edu/RTutorial/titanic.txt"
xx = getURL(url, nobody=1L, header=1L)
strsplit(xx, "\r\n")

Ответ 2

Используйте file.info()

file.info("data/ullyses.txt")

                    size isdir mode               mtime               ctime               atime  uid  gid
data/ullyses.txt 1573151 FALSE  664 2015-06-01 15:25:55 2015-06-01 15:25:55 2015-06-01 15:25:55 1008 1008

Затем извлеките столбец с именем size:

file.info("data/ullyses.txt")$size
[1] 1573151

Ответ 3

Если вы не хотите загружать файл, прежде чем знать его размер, вы можете попробовать что-то вроде этого:

Примечание. Это будет работать только на Mac или Linux.

file_url = 'http://math.ucdenver.edu/RTutorial/titanic.txt'
curl_cmd = paste('curl -X HEAD -i', file_url)
system_cmd = paste(curl_cmd, '|grep Content-Length |cut -d : -f 2')

Вышеприведённый пакет будет собирать строку, которая будет выполнена с использованием system(). Строка curl_cmd сообщает curl, чтобы получить только заголовок файла.

Строка system_cmd содержит несколько дополнительных команд для синтаксического анализа заголовка и извлечения только файлов.

Теперь вызовите system() и используйте аргумент intern = TRUE, чтобы сообщить R, чтобы он удерживался на выходе.

b <- system(system_cmd, intern = TRUE)
##  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current 
##                              Dload  Upload   Total   Spent    Left  Speed
##   0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:-- 0   
## curl: (18) transfer closed

Он загрузит только заголовок для файла и проанализирует его, чтобы получить размер файла. Теперь b будет размером в байтах.


Затем вы можете решить, как открыть файл, или распечатать что-то дружелюбное, например:

print(paste("There are", as.numeric(b)/1e6, "mb in the file:", file_url))
## [1] "There are 0.055692 mb in the file: http://math.ucdenver.edu/RTutorial/titanic.txt"