循环遍历 R 中的字符串变量名称

Loop through string variable names in R

我必须做一百次以下计算,从 art1 开始到 art250 结束:

sd_art1_2008 <- sd(c(art1_1_2008,art1_2_2008,art1_3_2008,art1_4_2008,art1_5_2008,art1_6_2008,art1_7_2008,art1_8_2008,art1_9_2008))

sd_art2_2008 <- sd(c(art2_1_2008,art2_2_2008,art2_3_2008,art2_4_2008,art2_5_2008,art2_6_2008,art2_7_2008,art2_8_2008,art2_9_2008)) ...等等..

我尝试与

进行交互
   paste("sd_art",i,"_2008", sep="") <-sd(c("art",i,"_1_2008","art",i,"_2_2008")))
   }

,但它出错了。有谁知道如何解决这个问题? 最好的问候,丹尼尔

全局环境中不应该有这样 100 个向量。正如您所注意到的,管理它们或对它们执行任何计算变得非常困难。 R 提供数据结构来管理这些对象,将它们放在列表或数据框中。

但是,考虑到手头的问题,您可以使用 ls 搜索全局环境中的所有变量,您还可以指定一个模式来查找具有相似名称的对象等。所以我们创建变量 art1, art2.....art250 使用 paste0。我们找到所有具有特定模式的变量,并取 sd 个和 return 个向量。

result <- sapply(paste0('art', 1:250, '_'), function(x) 
             sd(unlist(mget(ls(pattern = x, envir = .GlobalEnv),
                       .GlobalEnv)), na.rm = TRUE))

你可以用这个例子试试:

art1_1_2008 <- 1
art1_2_2008 <- 5
art2_1_2008 <- 6
art2_2_2008 <- 8

result <- sapply(paste0('art', 1:2), function(x) 
              sd(unlist(mget(ls(pattern = x, envir = .GlobalEnv), 
                 .GlobalEnv)), na.rm = TRUE))
result
#    art1     art2 
#2.828427 1.414214 

#Confirm values are correct by checking manually. 
sd(c(1, 5))
#[1] 2.828427
sd(c(6, 8))
#[1] 1.414214