【问题标题】:Load different workspaces with the same variable names without overwriting existing objects加载具有相同变量名的不同工作区而不覆盖现有对象
【发布时间】:2020-10-31 00:22:17
【问题描述】:

我有一个需要加载多个 .RData 文件的管道。但是,这些文件都包含相同的变量名(例如,ls() = c(df1, df2)),并且由于这些文件很大,我决定使用mclapply(c(a.RData, b.RData, c.RData), load, .GlobalEnv, mc.cores = parallel::detectCores()) 来节省时间。但是,由于它们具有相同的名称,df1 df2 将被覆盖。那么,有没有办法解决这个问题呢?

我在想:

  1. 我可以在加载到 R 之前更改变量名吗? .RData来自其他人的管道,所以我现在不能让他们更改变量,所以我想知道是否有办法在R外部或加载之前更改.RData的变量名称。

  2. 如果第一个不可能,如何写一个参数来检测变量是否因为名字重名而即将被覆盖,从而自动重命名变量。

【问题讨论】:

    标签: r load workspace mclapply


    【解决方案1】:

    加载到单独的环境

    # some script that outputs RData with x object
    x <- head(mtcars)
    save.image("temp.RData")
    
    # another script with different x value
    x <- 1:3
    
    # now load our RData into new separate environment
    e1 <- new.env(parent = baseenv())
    load("temp.RData", envir = e1)
    
    x
    # [1] 1 2 3
    
    e1$x
    #                    mpg cyl disp  hp drat    wt  qsec vs am gear carb
    # Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
    # Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
    # Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
    # Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
    # Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
    # Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1
    

    【讨论】:

    • 这真的很有帮助!谢谢!
    猜你喜欢
    • 2020-03-08
    • 1970-01-01
    • 2013-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-02
    • 2020-08-27
    • 1970-01-01
    相关资源
    最近更新 更多