импортировать файлы Excel из списка URL - PullRequest
0 голосов
/ 02 июня 2018

Моя цель - создать список фреймов данных, импортированных непосредственно из URL.Что у меня сейчас:

library(gdata)

urls <- list('https://minerals.usgs.gov/minerals/pubs/historical-statistics/ds140-chrom.xlsx',
    'https://minerals.usgs.gov/minerals/pubs/historical-statistics/ds140-coppe.xlsx',
    'https://minerals.usgs.gov/minerals/pubs/historical-statistics/ds140-nicke.xlsx',
    'https://minerals.usgs.gov/minerals/pubs/historical-statistics/ds140-tin.xlsx',
    'https://minerals.usgs.gov/minerals/pubs/historical-statistics/ds140-tungs.xlsx')


perl_dir <- 'C:/Strawberry/perl/bin/perl5.26.2.exe'
files <- lapply(urls, read.xls, perl = perl_dir)

Когда я запускаю это, я получаю ошибку:

Ошибка в xls2sep (xls, sheet, verbose = verbose, ..., method =метод: Промежуточный файл 'C: \ Users \ Mike \ AppData \ Local \ Temp \ Rtmpk9t4hG \ file308c4520306c.csv' отсутствует! Кроме того: Предупреждение: выполняется команда '' C: \ STRAWB ~ 1 \ perl \ bin \ PERL52 ~1.EXE "" C: /Users/Mike/Documents/R/win-library/3.3/gdata/perl/xls2csv.pl "" https://minerals.usgs.gov/minerals/pubs/historical-statistics/ds140-chrom.xlsx" "C: \ Users \ Mike \ AppData \ Local \ Temp\ Rtmpk9t4hG \ file308c4520306c.csv "" 1 "" имел статус 22 Ошибка в file.exists (tfn): неверный аргумент 'file'

Я предполагаю, что неверный аргумент файла означает, что он не может найтифайл. Не уверен, как исправить это, поскольку URL-адрес определенно правильный.

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 02 июня 2018

Если вы хотите избежать загрузки файлов и затем импортировать их, вы можете использовать пакет rio.Он имеет оболочку около readxl (по умолчанию) и openxlsx (не по умолчанию), что позволяет импортировать xlsx из URL-адресов.Я использую rio, потому что readxl не может читать URL .

require(tidyverse)
require(rio)

urls <- list('https://minerals.usgs.gov/minerals/pubs/historical-statistics/ds140-chrom.xlsx',
             'https://minerals.usgs.gov/minerals/pubs/historical-statistics/ds140-coppe.xlsx',
             'https://minerals.usgs.gov/minerals/pubs/historical-statistics/ds140-nicke.xlsx',
             'https://minerals.usgs.gov/minerals/pubs/historical-statistics/ds140-tin.xlsx',
             'https://minerals.usgs.gov/minerals/pubs/historical-statistics/ds140-tungs.xlsx')


Myxlsx <- lapply(urls, FUN = rio::import)
0 голосов
/ 02 июня 2018

Почему бы не сделать что-то подобное (используя более надежный пакет readxl):

urls <- list('https://minerals.usgs.gov/minerals/pubs/historical-statistics/ds140-chrom.xlsx',
    'https://minerals.usgs.gov/minerals/pubs/historical-statistics/ds140-coppe.xlsx',
    'https://minerals.usgs.gov/minerals/pubs/historical-statistics/ds140-nicke.xlsx',
    'https://minerals.usgs.gov/minerals/pubs/historical-statistics/ds140-tin.xlsx',
    'https://minerals.usgs.gov/minerals/pubs/historical-statistics/ds140-tungs.xlsx')

# Download files
mapply(download.file, unlist(urls), sapply(urls, basename))

# Read Excel files into a list of data.frames
library(readxl);
lst <- lapply(sapply(urls, basename), read_excel);

Это создает локальные копии файлов, но если это не нарушает условия, я рекомендую использовать readxl.Честно говоря, хранение копий исходных данных - это всегда хорошая идея для обеспечения воспроизводимости и согласованности результатов.

...