我正在使用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"
答案 0 :(得分: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
答案 1 :(得分: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