从R读取许多Excel文件

这是我第一次与R,所以也许这个问题是微不足道的

我需要从URL下载xls文件的date,每个应该在一个数据框。 像这里一样。

我决定使用gdata包(软件包'xlsReadWrite'不适用于R 3.1.0版,RODBC不适用于win64)

下载对于一个文件很好(例如= 2013)

readxls<-function() { library("gdata") link<-paste0("http://nbp.pl/kursy/archiwum/archiwum_tab_a_",year,".xls") xlsdata <<- read.xls(link, sheet = 1, perl = "C:\\Perl64\\bin\\perl.exe", header=TRUE) } 

我尝试使用循环将许多.xls读入list()。 (例如y_begin = 2012,y_end = 2014)

 readxls<-function() { library("gdata") ldata<<- list() j=1 for (i in y_begin:y_end) { link<-paste0("http://nbp.pl/kursy/archiwum/archiwum_tab_a_",i,".xls") xlsdata <<- read.xls(link, sheet = 1, perl = "C:\\Perl64\\bin\\perl.exe", header=TRUE) ldata[j] <<- xlsdata j<-j+1 } } 

我认为之后,我可以将它们合并,但不知道如何从列表中的单个数据框中获取数据,例如> View(ldata [2])只返回第一个列表

避免使用循环,特别是其副作用。 最好在这里使用lapply 。 这是R方式做事情(function编程)。 在这里,我会这样做:

 library(gdata) readxls<-function() { ids <- seq(y_begin,y_end) links <-paste0("http://nbp.pl/kursy/archiwum/archiwum_tab_a_",ids,".xls") lapply (links,function(i) read.xls(link, sheet = 1, perl = "C:\\Perl64\\bin\\perl.exe", header=TRUE) ) } 

这将返回一个data.frame列表来合并它们,假设它们是相同的:

 ll <- readxls() do.call(rbind,ll) 

非常感谢你,但答案很简单。 这足以让ldata [[j]]

 readxls<-function() { library("gdata") ldata<<- list() j=1 for (i in y_begin:y_end) { link<-paste0("http://nbp.pl/kursy/archiwum/archiwum_tab_a_",i,".xls") xlsdata <<- read.xls(link, sheet = 1, perl = "C:\\Perl64\\bin\\perl.exe", header=TRUE) ldata[[j]] <<- xlsdata j<-j+1 } }