如何将“assign”函数生成的对象保存为循环中的.Rdata文件

Posted

技术标签:

【中文标题】如何将“assign”函数生成的对象保存为循环中的.Rdata文件【英文标题】:How to save an object generated by "assign" function as .Rdata file in a loop 【发布时间】:2018-08-07 06:53:09 【问题描述】:

如何将“assign”函数生成的对象循环保存为 .RData 文件?这是一个例子。

for (ii in 1:3)
QQ=matrix(runif(15),5,3)
assign(paste0("FF", ii),QQ) 

【问题讨论】:

library("fortunes"); fortune(236) ***.com/questions/17559390/… 学习使用列表:QQlist <- lapply(1:3, function(ii) matrix(runif(15),5,3))QQlist <- replicate(3, matrix(runif(15),5,3), simplify = FALSE) 【参考方案1】:

就个人而言,我发现.RDS 文件更适合保存单个对象。例如:

for (ii in 1:3) 
    QQ = matrix(runif(15), 5, 3)
    object_name <- paste0("FF", ii)
    assign(object_name, QQ)
    tmp_fle <- tempfile(pattern = object_name, fileext = ".RDS")
    print(tmp_fle)
    saveRDS(
        object = get(x = object_name),
        file = tmp_fle
    )

鉴于结果:

# [1] "/var/folders/7x/kwc1y_l96t55_rwlv35mg8xh0000gn/T//Rtmpsj0j8h/FF1afe6b0a300.RDS"
# [1] "/var/folders/7x/kwc1y_l96t55_rwlv35mg8xh0000gn/T//Rtmpsj0j8h/FF2afe369d586e.RDS"
# [1] "/var/folders/7x/kwc1y_l96t55_rwlv35mg8xh0000gn/T//Rtmpsj0j8h/FF3afe1418b9c5.RDS"

访问第二个保存的对象:

>> readRDS("/var/folders/7x/kwc1y_l96t55_rwlv35mg8xh0000gn/T//Rtmpsj0j8h/FF2afe369d586e.RDS")
           [,1]      [,2]      [,3]
[1,] 0.38537636 0.2969078 0.9603315
[2,] 0.08339023 0.9127538 0.6552166
[3,] 0.55220069 0.4384881 0.5345182
[4,] 0.10179912 0.6353755 0.8247961
[5,] 0.63983736 0.8858784 0.8904668

【讨论】:

以上是关于如何将“assign”函数生成的对象保存为循环中的.Rdata文件的主要内容,如果未能解决你的问题,请参考以下文章

为什么代理属性设置成assign为了防止生成保留环来

在循环中运行相同的函数并保存输出

R语言 变量赋值和提取 获取环境中的变量并赋值 assign和get函数使用

js中的Object.assign接受两个函数为参数的时候会发生什么?

如何将在 for 循环中生成的多个图形而不是 SUBPLOTS 保存为一个图形? [复制]

iOS中的assign,retain,copy等