2015-03-05 6 views
1

У меня есть 1000 списков, сохраненных как Rdata все сохраненные в одном каталоге. Каждый список имеет такое же имя, имеет 5 пунктов и выглядит следующим образом:преобразовать список Rdata в dataframe в R

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") 

, но теперь я не знаю, как извлечь данные из этого списка, очевидно, «Темп» дает мне эту

[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 "...

Так что я теперь должен знать, как извлечь данные из списка и привязать его к dataframe 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 

Я пытался играть с этим именем. список < - lapply (температура, нагрузка)

и это

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

, но я честно очень потерянным и не получить в любом месте, так ваша помощь будет электронной очень благодарен.

ответ

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 
+0

Спасибо за предложение. К сожалению, это говорит мне, что caanot находит значение для '1_list.hv_Amono_volume_rand'. –

+0

Вам нужно сначала проверить, когда вы набираете '1_list.hv_Amono_volume_rand' или' 1000_list.hv_Amono_volume_rand' в консоли, дает ли он вам выход ?. Если вы это увидите, этот код будет работать. « – Metrics

+0

, к сожалению, он не дает мне выход. Я не могу понять, как получить доступ к данным в этом списке. Я знаю, что он есть, потому что я загрузил отдельные файлы и могу посмотреть на них в консоли с помощью «list.hv_Amono_volume». это то же самое, загружаю ли я 1_list.hv_Amono_volume_rand 'или' 1000_list.hv_Amono_volume_rand '. –

0

Это тестировалась. Идея заключается в том, что когда вы загружаете() файл, появляются объекты R, которые загружаются. В этом примере я предполагаю, что каждый файл содержит только один объект R. В функции getList() мы загружаем файл во временную среду, читаем ее, находим имя и возвращаем объект (который, мы надеемся, содержит список). Основное предположение здесь состоит в том, что в файле есть только один объект, и это список. Затем используйте сопло, как вы пробовали ...

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))) 
+0

Да, каждый объект представляет собой список длины 5. Но у меня есть 1000 из них в одном файле в моем каталоге. Вы имеете в виду под именем filename имя файла, в котором хранятся мои объекты R? и «theName» вы имеете в виду имя объекта Rdata, как только я его загрузил? Потому что это имя одинаково для 1000 объектов. –

+0

yes, filename - это имя файла ... которое должно храниться в "temp". theName - это имя объекта, хранящегося в файле. Если вы знаете, что это за объект, вы можете вырезать эту часть функции. – cory

Смежные вопросы