Как я могу проверить размер файла, прежде чем загружать его в R?
Например:
http://math.ucdenver.edu/RTutorial/titanic.txt
Я бы хотел использовать оптимальную команду для открытия файла на основе размера файла.
Как я могу проверить размер файла, прежде чем загружать его в R?
Например:
http://math.ucdenver.edu/RTutorial/titanic.txt
Я бы хотел использовать оптимальную команду для открытия файла на основе размера файла.
library(RCurl)
url = "http://math.ucdenver.edu/RTutorial/titanic.txt"
xx = getURL(url, nobody=1L, header=1L)
strsplit(xx, "\r\n")
Используйте 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
Если вы не хотите загружать файл, прежде чем знать его размер, вы можете попробовать что-то вроде этого:
Примечание. Это будет работать только на 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"