我的数据我想将我的Rdata文件合并成一个具有相同对象名称并保存到目录中的新组合Rdata文件,有些人认为类似于此线程,但无法做到这一点得到错误任何人请建议任何简单的方法在R中做到这一点我是新的R无法弄清楚。
all.files = c("data1.Rdata", "data1.Rdata", "data1.Rdata")
mylist<- lapply(all.files, function(x) {
load(file = x)
get(ls()[ls()!= "filename"])
})
names(mylist) <- all.files
如果我理解正确的话,你想把所有的.RData
变成一个单独的data.frame
。
一个选项是列出工作目录中扩展名为.RData
的所有文件,使用rbind
加载并组合它们:
ll <- list.files(pattern = '.RData')
res <- do.call(rbind,
lapply(ll, function(x) {
load(file = x)
get(ls())
}))
不,我们可以检查前6行。
head(res)
# chrom start end gid gname tid strand
#32590 chr7 45574608 45574777 ENSMUSG00000085214 0610005C13Rik ENSMUST00000130094 -
#109006 chr4 154023688 154023891 ENSMUSG00000078350 1190007F08Rik ENSMUST00000143047 -
#475764 chr15 83365029 83365513 ENSMUSG00000075511 1700001L05Rik ENSMUST00000178628 -
#448806 chr13 31567474 31567610 ENSMUSG00000038408 1700018A04Rik ENSMUST00000150418 -
#11159 chr6 147694981 147695041 ENSMUSG00000085077 1700049E15Rik ENSMUST00000152737 +
#339243 chr12 22958352 22960254 ENSMUSG00000073164 2410018L13Rik ENSMUST00000149246 -
# class biotype byname.uniq bygid.uniq
#32590 altAcceptor lincRNA TRUE TRUE
#109006 altAcceptor lincRNA TRUE TRUE
#475764 altAcceptor lincRNA TRUE TRUE
#448806 altAcceptor lincRNA TRUE TRUE
#11159 altAcceptor lincRNA TRUE TRUE
#339243 altAcceptor lincRNA TRUE TRUE
and bottom 6 too:
tail(res)
# chrom start end gid gname tid strand
#189235 chr6 90373711 90373841 ENSMUSG00000034430 Zxdc ENSMUST00000113539 +
#563026 chr11 72916473 72916587 ENSMUSG00000055670 Zzef1 ENSMUST00000069395 +
#563046 chr11 72916473 72916587 ENSMUSG00000055670 Zzef1 ENSMUST00000152481 +
#158407 chr3 152449013 152449128 ENSMUSG00000039068 Zzz3 ENSMUST00000106101 +
#158450 chr3 152449013 152449128 ENSMUSG00000039068 Zzz3 ENSMUST00000106103 +
#158465 chr3 152449016 152449128 ENSMUSG00000039068 Zzz3 ENSMUST00000089982 +
# class biotype byname.uniq bygid.uniq
#189235 altAcceptor protein_coding FALSE FALSE
#563026 altAcceptor protein_coding FALSE FALSE
#563046 altAcceptor protein_coding FALSE FALSE
#158407 altAcceptor protein_coding FALSE FALSE
#158450 altAcceptor protein_coding FALSE FALSE
#158465 altAcceptor protein_coding FALSE FALSE
,你可以检查尺寸。
dim(res)
#24279 11
编辑
这在R 4.0.3
上有效。似乎R 4.1.1.
失败了。我将用一个新的解决方案编辑答案。
我通常使用循环:
FileVector <- c("data1.Rdata", "data1.Rdata", "data1.Rdata")
Res <- vector(mode = "list",
length = length(FileVector))
for (m1 in seq_along(FileVector)) {
FilesLoaded <- load(file = FileVector[m1],
verbose = FALSE)
if ("filename" %in% FilesLoaded) {
Res[[m1]] <- get("filename")
}
rm(list = FilesLoaded)
}
这给了我们一个列表,我们可以在循环中添加其他检查,例如,不添加在任何列中都有值的数据,或者我们也可以检查每个新数据块以确保某些列名存在。如果您有现实世界的问题,例如某些数据文件没有正确生成,您也可以将load()
调用包装在try()
调用中。然后加上do.call()
# Null positions will be dropped
Res <- do.call(rbind,
Res)
用list.files()
这样的参数构建文件名向量并指定pattern =
参数通常是有利的。
通常看起来像这样:
FileVector <- list.files(path = "~/my/directory",
full.names = TRUE,
pattern = "mypattern")