我正在尝试将指定目录中所有 .RData
个文件的数据框对象的数据加载到单个数据表中。这就是我试图这样做的方式:
library(data.table)
fileList <- list.files("../cache/FLOSSmole", pattern="\\.RData$", full.names=TRUE)
dataset <- rbindlist(lapply(fileList, FUN=function(file) {as.data.table(load(file))}))
然而,结果与预期的不同(包含所有数据的单个数据表) - 它只包含数据框对象的名称来自源.RData
文件:
> str(dataset)
Classes ‘data.table’ and 'data.frame': 39 obs. of 1 variable:
$ V1: chr "lpdOfficialBugTags" "lpdLicenses" "lpdMilestones" "lpdSeries" ...
- attr(*, ".internal.selfref")=<externalptr>
> head(dataset)
V1
1: lpdOfficialBugTags
2: lpdLicenses
3: lpdMilestones
4: lpdSeries
5: lpdProjects
6: lpdProgrammingLanguages
我做错了什么?非常感谢您的帮助!
我的R环境:
> sessionInfo()
R version 3.1.0 (2014-04-10)
Platform: x86_64-pc-linux-gnu (64-bit)
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] data.table_1.9.2
loaded via a namespace (and not attached):
[1] plyr_1.8.1 Rcpp_0.11.1 reshape2_1.4 stringr_0.6.2 tools_3.1.0
答案 0 :(得分:4)
.RData
是一个已保存的工作空间,它可能包含数据框,但它不是数据框。每个.RData
有多少个数据框?您可以加载多个.RData
文件,然后将它们添加到当前工作区。只需将它们加载到merge
或rbind
数据框,只要它们位于当前工作空间中
# lapply(FileList,function(x) load(x)) # Changed to a for loop, I guess the lapply was only loading into the lapply environment which disappears when the function ends
for (i in 1:length(FileList)) {
load(FileList[i])
}
my.list <- vector(length(ls()),mode="list")
for (i in 1:length(ls())) {
my.list[[i]] <- get(ls()[i])
}
my.rbind <- do.call(rbind,my.list)
这是一种方式。一种更简单的方法是首先将单个表保存为分隔文本文件。