将目录中的所有 Rdata 文件与其中的同名对象合并
Combine all Rdata files in directory with a same name object in it
My data I want to combine my Rdata files into one which is having same object name and save to new combined Rdata file in an directory some think like similar to this thread 但无法做到 出现错误 任何人请建议在 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
还有后 6 名:
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")
My data I want to combine my Rdata files into one which is having same object name and save to new combined Rdata file in an directory some think like similar to this thread 但无法做到 出现错误 任何人请建议在 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
还有后 6 名:
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")