如何在不覆盖现有文件的情况下将多个文件加载到R中?

时间:2014-09-24 13:51:43

标签: r loops for-loop

您好我想以.sas7bdat格式加载到R几个数据库中。每次加载新数据库时,我都想显示其名称(例如file.sas7bdat - >文件)。我在R中编写了一个代码(如下所示),但它不起作用。我认为它用新数据库覆盖现有数据库。如果有任何改进建议,我将不胜感激。

  getwd()
files<-list.files(pattern="*.sas7bdat")
for (i in 1:length(files)) {
  data[i]<-read.sas7bdat(files[i])
}

2 个答案:

答案 0 :(得分:2)

我没有任何sad7bdat文件,但这个概念应该转换为大多数read.*函数。您使用for循环处于正确的轨道,但可以使用lapply()直接创建列表,如下所示:

#Make a few CSV files
x <- matrix(rnorm(10), ncol = 2)
write.csv(x, "a.csv")
write.csv(x, "b.csv")

#Read them into a list
fileList <- lapply(list.files(pattern = "*.csv"), function(x) read.csv(x))

#check out what we ended up with
str(fileList)
#---
List of 2
 $ :'data.frame':   5 obs. of  3 variables:
  ..$ X : int [1:5] 1 2 3 4 5
  ..$ V1: num [1:5] -0.451 -0.317 -1.225 0.445 -1.361
  ..$ V2: num [1:5] 0.489 -2.8154 0.5147 -0.0561 0.826
 $ :'data.frame':   5 obs. of  3 variables:
  ..$ X : int [1:5] 1 2 3 4 5
  ..$ V1: num [1:5] -0.451 -0.317 -1.225 0.445 -1.361
  ..$ V2: num [1:5] 0.489 -2.8154 0.5147 -0.0561 0.826

答案 1 :(得分:0)

library(sas7bdat)

setwd(".... WHERE SAS FILES LIVES...")

load.sas <- function(x) {
    name <- strsplit(x,"\\.")[[1]][1]
    assign(name, read.sas7bdat(x), env=.GlobalEnv)
    TRUE
}   

sapply(list.files(path=".", pattern="*.sas7bdat", full.names=F), load.sas)`

您可以在此代码中添加任何期货,仅重新调整某些数据或....