Вставить векторы без функции `rbind` - PullRequest
0 голосов
/ 05 октября 2018

У меня есть 10 Векторов в моей среде R.Я хочу вставить эти векторы для создания фрейма данных.Я использовал функцию rbind, но я думаю, что это очень неэффективно, потому что я должен ввести все переменные в функции.Вопрос в том, могу ли я использовать функцию paste0 или paste или другую подобную функцию для вставки этих векторов? Спасибо.

#Por ejemplo

x1 <- c(1, 2)
x2 <- c(3, 4)
x3 <- c(5, 6)
x4 <- c(7, 8)
x5 <- c(9, 10)
x6 <- c(11, 12)
x7 <- c(13, 14)
x8 <- c(15, 16)
x9 <- c(17, 18)
x10 <- c(19, 30)

rbind(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10)

Я хочу вставить эти векторы без rbind, с некоторыми функциями, такими как paste0 или paste.

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

ls() возвращает вектор всех имен переменных в вашей среде.Если вы делаете регулярное выражение для каждого имени переменной, которое начинается с x , то вы можете перебирать новый вектор и get() их вызывать переменную с этим именем.Если вы вызовете get в функции lapply, вы получите список всех вызванных переменных.do.call() выполняет функцию для каждого элемента в списке.

to_get <- ls()[grepl('^x', ls())]
to_bind <- lapply(to_get, get)
final_matrix <- do.call(rbind, to_bind)
0 голосов
/ 05 октября 2018

Функция do.call полезна, когда аргумент является списком, и функция ожидает элементы, которые являются просто векторами.Поскольку mget, который возвращает список, является естественным инструментом при попытке перейти от символа к имени объекта, вы можете попробовать:

do.call(rbind, mget(paste0("x", 1:10)))
#---
    [,1] [,2]
x1     1    2
x2     3    4
x3     5    6
x4     7    8
x5     9   10
x6    11   12
x7    13   14
x8    15   16
x9    17   18
x10   19   30

или использовать matrix

matrix(unlist(mget(paste0("x", 1:10))), ncol=2, byrow = TRUE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...