1

Rdata として保存された 1000 個のリストがすべて 1 つのディレクトリに保存されています。各リストは同じ名前で、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
" " ...

したがって、リストからデータを抽出し、次のような 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(temp,load)

この

sapply(Amono_list.hv,  function(x) load(x, .GlobalEnv), USE.NAMES=FALSE)

しかし、私は正直なところ非常に迷っていて、どこにも行けないので、あなたの助けが非常にありがたいです.

4

2 に答える 2

0
#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  
于 2015-03-05T11:20:10.660 に答える
0

これはテストされていません。アイデアは、ファイルを load() すると、ロードされる R オブジェクトがあるということです。この例では、各ファイルに 1 つの R オブジェクトのみが含まれていると想定しています。getList() 関数では、ファイルを一時的な環境にロードし、読み取り、名前を見つけて、オブジェクト (できればリスト) を返します。ここでの主な前提は、ファイルごとに 1 つのオブジェクトしかなく、それがリストであるということです。次に、試したように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)))
于 2015-03-05T12:46:45.593 に答える