【问题标题】:Calling objects inside for loops in R using i使用 i 在 R 中的 for 循环中调用对象
【发布时间】:2020-05-16 09:14:25
【问题描述】:

所以在用 R 编码时遇到了一个小问题。

#R Code beigns
a_rolled <- load("/file1.Rdata")
b_rolled <- load("/file2.Rdata")
a_data <- load("/file3.Rdata")
b_data <- load("/file4.Rdata")

for(ii in c("a","b"))
{

temp1 <- merge(as.name(paste0(ii, "_rolled")), as.name(paste0(ii, "_data")), by="ID", all.x=T)
assign(paste0(ii,"_final"),value=temp1)

}

save(a_final,"/file5.Rdata")
save(b_final,"/file5.Rdata")

由于我想根据循环的“i”值动态调用数据并合并它们,有没有办法做到这一点? as.names() 在这些情况下不起作用,感谢您的帮助:)

【问题讨论】:

    标签: r for-loop object variables iteration


    【解决方案1】:

    您可以使用mget 将数据从字符串获取到实际对象,并使用Mapmerge 它们。

    vec <- c("a","b")
    
    result_data <- Map(function(x, y) merge(x, y, by='ID', all.x=TRUE), 
                       mget(paste0(vec, '_rolled')), mget(paste0(vec, '_data')))
    

    这将返回数据框列表,如果您希望它们在单独的数据框中,我们可以重命名列表并使用list2env

    names(result_data) <- paste0(vec, '_final')
    list2env(result_data, .GlobalEnv)
    

    现在,您将在全局环境中拥有 a_finalb_final

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-11
      • 2013-05-16
      • 1970-01-01
      • 1970-01-01
      • 2016-03-21
      • 2015-07-05
      • 1970-01-01
      • 2016-11-24
      相关资源
      最近更新 更多