将 Rdata 列表转换为 R 中的数据框
convert list of Rdata into dataframe in R
我有 1000 个保存为 Rdata 的列表都保存在一个目录中。
每个列表都有相同的名称,有 5 个项目,如下所示:
list.hv_Amono_volume
[[1]]
[1] 1.059246
[[2]]
[1] 1.047688
[[3]]
[1] 10.70799
[[4]]
[1] 10.30472
[[5]]
[1] 2.53379
第一次将文件存储在我的目录中时,我为每个文件指定了一个唯一的名称,即:
1_list.hv_Amono_volume_rand.Rdata,
2_list.hv_Amono_volume_rand.Rdata,
3_list.hv_Amono_volume_rand.Rdata ... 1000_list.hv_Amono_volume_rand.Rdata
我已经加载了所有 1000 个 Rdata 文件如下:
temp =list.files(path="mydirectory",pattern="*_list.hv_Amono_volume_rand.Rdata")
但现在我不知道如何从这个列表中提取数据,显然 'temp' 给了我这个
[1] "1_list.hv_Amono_volume_rand.Rdata" "10_list.hv_Amono_volume_rand.Rdata"
[3] "100_list.hv_Amono_volume_rand.Rdata" "1000_list.hv_Amono_volume_rand.Rdata"
[5] "101_list.hv_Amono_volume_rand.Rdata" "102_list.hv_Amono_volume_rand.Rdata"
[7] "103_list.hv_Amono_volume_rand.Rdata" "104_list.hv_Amono_volume_rand.Rdata"
[9] "105_list.hv_Amono_volume_rand.Rdata" "106_list.hv_Amono_volume_rand.Rdata"
[11] "107_list.hv_Amono_volume_rand.Rdata" "108_list.hv_Amono_volume_rand.Rdata"
[13] "109_list.hv_Amono_volume_rand.Rdata" "11_list.hv_Amono_volume_rand.Rdata"
[15] "110_list.hv_Amono_volume_rand.Rdata" "111_list.hv_Amono_volume_rand.Rdata" ...
所以我现在需要知道如何从列表中提取数据并将其绑定到具有 1000 列的数据框,如下所示:
1 2 ... 1000
1.059246 1.044808 1.046917
1.047688 1.046857 1.036242
10.70799 10.70204 10.0781
10.30472 9.319236 10.29681
2.53379 2.430255 2.482879
我试过玩这个
named.list <- lapply(温度,负载)
还有这个
sapply(Amono_list.hv, function(x) load(x, .GlobalEnv), USE.NAMES=FALSE)
但老实说,我很迷茫,一无所获,因此非常感谢您的帮助。
#This may work
do.call(cbind,mget(paste0(1:1000,"_list.hv_Amono_volume_rand")))
#Edit: as per comments
示例:
x1<-as.list(1:3)
x2<-as.list(4:6)
save(x1,file="mydata1.RData")
save(x2,file="mydata2.RData")
tem<-list.files(pattern="*.RData")
str(tem)
chr [1:2] "mydata1.RData" "mydata2.RData"
kk<-lapply(tem,load)
List of 2
$ : chr "x1"
$ : chr "x2"
do.call(cbind,lapply(1:2,function(i)get(kk[[i]])))
[,1] [,2]
[1,] 1 4
[2,] 2 5
[3,] 3 6
这是未经测试的。这个想法是当你 load() 一个文件时,有 R 对象被加载。对于这个例子,我假设每个文件只包含一个 R 对象。在 getList() 函数中,我们将文件加载到一个临时环境中,读取它,找到名称,然后 return 对象(希望是一个列表)。这里的主要假设是每个文件只有一个对象,它是一个列表。然后像您尝试过的那样使用 sapply...
temp <-list.files(path="mydirectory",pattern="*_list.hv_Amono_volume_rand.Rdata")
e <- new.env()
getList <- function(filename){
rm(list = ls(all = TRUE), envir=e)
load(filename, envir=e)
# get name of thing you loaded... assuming just one thing there...
theName <- ls(envir=e)[1]
return(get(theName))
}
df <- sapply(temp, function(x)cbind(getList(x)))
我有 1000 个保存为 Rdata 的列表都保存在一个目录中。 每个列表都有相同的名称,有 5 个项目,如下所示:
list.hv_Amono_volume
[[1]]
[1] 1.059246
[[2]]
[1] 1.047688
[[3]]
[1] 10.70799
[[4]]
[1] 10.30472
[[5]]
[1] 2.53379
第一次将文件存储在我的目录中时,我为每个文件指定了一个唯一的名称,即: 1_list.hv_Amono_volume_rand.Rdata,
2_list.hv_Amono_volume_rand.Rdata,
3_list.hv_Amono_volume_rand.Rdata ... 1000_list.hv_Amono_volume_rand.Rdata
我已经加载了所有 1000 个 Rdata 文件如下:
temp =list.files(path="mydirectory",pattern="*_list.hv_Amono_volume_rand.Rdata")
但现在我不知道如何从这个列表中提取数据,显然 'temp' 给了我这个
[1] "1_list.hv_Amono_volume_rand.Rdata" "10_list.hv_Amono_volume_rand.Rdata"
[3] "100_list.hv_Amono_volume_rand.Rdata" "1000_list.hv_Amono_volume_rand.Rdata"
[5] "101_list.hv_Amono_volume_rand.Rdata" "102_list.hv_Amono_volume_rand.Rdata"
[7] "103_list.hv_Amono_volume_rand.Rdata" "104_list.hv_Amono_volume_rand.Rdata"
[9] "105_list.hv_Amono_volume_rand.Rdata" "106_list.hv_Amono_volume_rand.Rdata"
[11] "107_list.hv_Amono_volume_rand.Rdata" "108_list.hv_Amono_volume_rand.Rdata"
[13] "109_list.hv_Amono_volume_rand.Rdata" "11_list.hv_Amono_volume_rand.Rdata"
[15] "110_list.hv_Amono_volume_rand.Rdata" "111_list.hv_Amono_volume_rand.Rdata" ...
所以我现在需要知道如何从列表中提取数据并将其绑定到具有 1000 列的数据框,如下所示:
1 2 ... 1000
1.059246 1.044808 1.046917
1.047688 1.046857 1.036242
10.70799 10.70204 10.0781
10.30472 9.319236 10.29681
2.53379 2.430255 2.482879
我试过玩这个 named.list <- lapply(温度,负载)
还有这个
sapply(Amono_list.hv, function(x) load(x, .GlobalEnv), USE.NAMES=FALSE)
但老实说,我很迷茫,一无所获,因此非常感谢您的帮助。
#This may work
do.call(cbind,mget(paste0(1:1000,"_list.hv_Amono_volume_rand")))
#Edit: as per comments
示例:
x1<-as.list(1:3)
x2<-as.list(4:6)
save(x1,file="mydata1.RData")
save(x2,file="mydata2.RData")
tem<-list.files(pattern="*.RData")
str(tem)
chr [1:2] "mydata1.RData" "mydata2.RData"
kk<-lapply(tem,load)
List of 2
$ : chr "x1"
$ : chr "x2"
do.call(cbind,lapply(1:2,function(i)get(kk[[i]])))
[,1] [,2]
[1,] 1 4
[2,] 2 5
[3,] 3 6
这是未经测试的。这个想法是当你 load() 一个文件时,有 R 对象被加载。对于这个例子,我假设每个文件只包含一个 R 对象。在 getList() 函数中,我们将文件加载到一个临时环境中,读取它,找到名称,然后 return 对象(希望是一个列表)。这里的主要假设是每个文件只有一个对象,它是一个列表。然后像您尝试过的那样使用 sapply...
temp <-list.files(path="mydirectory",pattern="*_list.hv_Amono_volume_rand.Rdata")
e <- new.env()
getList <- function(filename){
rm(list = ls(all = TRUE), envir=e)
load(filename, envir=e)
# get name of thing you loaded... assuming just one thing there...
theName <- ls(envir=e)[1]
return(get(theName))
}
df <- sapply(temp, function(x)cbind(getList(x)))