使用 mapply 保存时保留列表元素的名称
preserve name of list element when saving using mapply
我正在使用 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"
问得好,这可能不是理想的答案。无论如何,一种可能性是将列表用作环境并将其与 save()
中的 list
参数相结合。这里的关键是获得正确的排序,因为 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
这是我的尝试:
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
我正在使用 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"
问得好,这可能不是理想的答案。无论如何,一种可能性是将列表用作环境并将其与 save()
中的 list
参数相结合。这里的关键是获得正确的排序,因为 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
这是我的尝试:
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