循环遍历 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
我必须做一百次以下计算,从 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