问题描述
此代码:
for (i in 1:10) {
assign(paste0('x',i),i)
}
在 for 循环中创建 10 个变量。我想在一个向量中考虑所有这些变量,例如
c(x1,x2,x3,x4,x5,x6,x7,x8,x9,x10)
解决方法
这个问题可以用ls
和mget
的组合来解决。
for (i in 1:10) {
assign(paste0('x',i),i)
}
x_vars <- ls(pattern = "^x\\d+$",envir = .GlobalEnv)
x_all <- mget(x_vars,envir = .GlobalEnv)
x_all <- sort(unlist(x_all))
x_all
# x1 x2 x3 x4 x5 x6 x7 x8 x9 x10
# 1 2 3 4 5 6 7 8 9 10
我假设向量元素的顺序必须与它们在 for
循环中创建的顺序相同。
或者,不创建 x_vars
:
x_all <- mget(ls(pattern = "^x\\d+$",envir = .GlobalEnv),envir = .GlobalEnv)
x_all <- sort(unlist(x_all))
,
不需要循环。为什么不直接命名一个值向量>
x_all <- 1:10
names(x_all) <- paste0("x",x_all)
x_all
#----------------
x1 x2 x3 x4 x5 x6 x7 x8 x9 x10
1 2 3 4 5 6 7 8 9 10
,
带有 str_c
的选项
library(stringr)
names(x_all) <- str_c("x",x_all)