2016-09-09 8 views
3

私はmapply()を使用してリストから要素を別々のファイルに保存しています。例えば。保存するときにリスト要素の名前を保存する

file.names <- c('~/a.RData', '~/b.RData') 
data.list <- list(foo = c(1:10), bar = rep(1, 10)) 

mapply(function(x, y) save(x, file = y), data.list, file.names) 

と私は再びそれらをロードした後、元の名前で要素を呼び出すことができるようにしたいと思います。今、私は

load('~/a.RData') 
ls() 
"x" 

を取得するが、私は

load('~/a.RData') 
ls() 
"foo" 

答えて

4

ここでは私の試みです:

mapply(function(x, y, z) { 
    assign(y,x) 
    save(list=y,file=z) 
}, data.list, names(data.list), file.names) 

の出力を確認してみましょう:

#rm(list=ls()) 
load('~/a.RData') 
ls() 
#[1] "foo" 

load('~/b.RData') 
ls() 
[1] "bar" "foo" 

foo 
#[1] 1 2 3 4 5 6 7 8 9 10 
bar 
#[1] 1 1 1 1 1 1 1 1 1 1 
5

良い質問を取得したいのですが、これはおそらく理想的な答えではありません。いずれにしても、リストを環境として使用し、list引数を使用してそれをsave()に結合することも可能です。ここでの鍵は、ls()が出力を注文するので、注文権を得ることです。 with()はリストから環境を作成するので、list引数を簡単に使用できます。

with(data.list, { 
    mapply(
     function(x, y) save(list = x, file = y), 
     ls()[order(names(data.list))], 
     file.names 
    ) 
}) 
# $foo 
# NULL 
# 
# $bar 
# NULL 

チェック:

load('~/a.RData') 
ls() 
# [1] "data.list" "f"   "file.names" "foo"  
load('~/b.RData') 
ls() 
# [1] "bar"  "data.list" "f"   "file.names" "foo"  
foo 
# [1] 1 2 3 4 5 6 7 8 9 10 
bar 
# [1] 1 1 1 1 1 1 1 1 1 1 
関連する問題