Как определить последовательность в функции get? - PullRequest
0 голосов
/ 18 марта 2019

Скажем, у меня есть следующие объекты:

v1=11:12; v2=13:14; v3=15:16

Я могу объединить их одним из следующих двух способов:

combined = c(); for(i in 1:3) combined=c(combined, get(paste0("v", i)))
# or
combined = c(get(paste0("v", 1)), get(paste0("v", 2)), get(paste0("v", 3)))

Разве второй способ не эффективнее, если у меня много векторов, каждый из которых содержит тысячи элементов? Есть ли способ определения последовательности 2-м способом?

Спасибо

Ответы [ 2 ]

0 голосов
/ 18 марта 2019

Вы можете использовать mget() для определения нескольких имен объектов и использовать unlist() для преобразования в один вектор

v1=11:12; v2=13:14; v3=15:16
combined = unlist(mget(paste0("v", 1:3)), use.names = F)

Просто обновите use.names = T, если хотите получить результирующий комбинированный вектор с именованными элементами.

0 голосов
/ 18 марта 2019

Мы можем использовать mget, чтобы вернуть значения всех объектов (строк 'v1', 'v2', 'v3') в list, а затем объединить с do.call

do.call(c, mget(paste0("v", 1:3)))

Это также может быть построено с ls

do.call(c, mget(ls(pattern = "^v\\d+")))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...