Я хотел бы выполнить итерацию цикла for по списку, применяя следующую функцию ко всем элементам списка:
new_x = do.call("rbind",mget(ls(pattern = "^x.*")))
Где x
— определенный шаблон имени фрейма данных. Как выполнить итерацию по списку, где элемент списка i
является шаблоном имени для моей функции? Целью было бы получить что-то вроде этого:
for (i in filenames){
i = do.call("rbind",mget(ls(pattern = "^i.*")))
}
Итак, мой вопрос в основном заключается в том, как использовать i
в шаблоне имени, поэтому я могу использовать цикл для объединения отдельных частей фрейма данных xpart1
, xpart2
, xpart3
до x
; ypart1
, ypart2
, ypart3
до y
и так далее....
Заранее спасибо!
1 ответ
Если мы используем цикл for
, тогда опция
v1 <- ls(pattern = "^x.*")
lst1 <- vector('list', length(v1))
for(i in seq_along(v1)){
lst1[[i]] <- get(v1[i])
}
do.call(rbind, lst1)
Или, если нам нужно использовать i
для создания pattern
, мы можем использовать paste
lst1 <- vector('list', length(filenames))
names(lst1) <- filenames
for(i in filenames){
lst1[[i]] <- get(ls(pattern = paste0(i, ".*")))
}
do.call(rbind, lst1)
ПРИМЕЧАНИЕ. get
возвращает значение одного объекта, тогда как mget
возвращает более одного объекта в list
. Если мы используем цикл for
, мы предполагаем, что он возвращает один объект внутри цикла, а get
нужен только
Основываясь на разъяснении OP, мы также можем использовать mget
xs <- paste0("xpart", 1:100)
ys <- paste0("ypart", 1:100)
xsdat <- do.call(rbind, mget(xs))
ysdat <- do.call(rbind, mget(ys))
x
в шаблоне имени pattern = "^x.*"
меняется примерно n=100 раз. В основном я хочу использовать этот цикл для объединения отдельных частей фрейма данных xpart1
, xpart2
, xpart3
в x
; ypart1
, ypart2
, ypart3
до y
и т. д.
do.call("rbind",mget(ls(pattern = "^x.*")))
, мне было непонятно.
Похожие вопросы
Новые вопросы
r
R — это бесплатный язык программирования с открытым исходным кодом и программная среда для статистических вычислений, биоинформатики, визуализации и общих вычислений. Пожалуйста, используйте минимально воспроизводимые примеры, которые другие могут запустить с помощью копирования и вставки. Показать желаемый результат. Используйте dput() для данных и укажите все небазовые пакеты с помощью library(). Не вставляйте изображения для данных или кода, вместо этого используйте блоки кода с отступом. Для вопросов по статистике используйте https://stats.stackexchange.com.