Я хотел бы выполнить итерацию цикла 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 и так далее....

Заранее спасибо!

0
Mcgroger 24 Ноя 2019 в 22:13
Вы можете проверить мое обновление.
 – 
akrun
24 Ноя 2019 в 22:33

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))
0
akrun 24 Ноя 2019 в 22:33
Проблема в том, что x в шаблоне имени pattern = "^x.*" меняется примерно n=100 раз. В основном я хочу использовать этот цикл для объединения отдельных частей фрейма данных xpart1, xpart2, xpart3 в x; ypart1, ypart2 , ypart3 до y и т. д.
 – 
Mcgroger
24 Ноя 2019 в 22:27
1
Я обновил пост. Судя по вашему первому коду, do.call("rbind",mget(ls(pattern = "^x.*"))), мне было непонятно.
 – 
akrun
24 Ноя 2019 в 22:29