Этот код:

for (i in 1:10) {
    assign(paste0('x', i), i)
}

Создает 10 переменных в цикле for. Я хотел бы рассмотреть все эти переменные в векторе, например

c(x1,x2,x3,x4,x5,x6,x7,x8,x9,x10)
-1
Mark 10 Июл 2021 в 20:59

3 ответа

Лучший ответ

Проблему можно решить с помощью комбинации 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))
2
Rui Barradas 10 Июл 2021 в 18:27

Нет необходимости в петле. Почему бы просто не назвать вектор значений>

 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 
0
IRTFM 10 Июл 2021 в 18:34

Вариант с str_c

library(stringr)
 names(x_all) <- str_c("x", x_all)
0
akrun 10 Июл 2021 в 19:01