使用mapply保存列表元素时,保留名称。

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"
2个回答

5

这是一个很好的问题,但我的回答可能不是最理想的。有一种可能的方法是将列表作为环境,并将其与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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接