#r
#r
Вопрос:
R, как использовать цикл for, чтобы каждый элемент в списке выполнялся одной и той же командой
например, datanewV_102,datanewV_103,datanewV_105 представляют собой фрейм данных со 100 наблюдениями и 50 столбцами.
Я хочу удалить один и тот же столбец, лучший 6-й столбец, для всех трех фреймов данных
Желаемый результат: (нет нового фрейма данных, отредактируйте существующий фрейм данных.)
datanewV_102,datanewV_103,datanewV_105 становятся фреймами данных со 100 наблюдениями и 49 столбцами.
Мой код был похож:
vlist12 = список (datanewV_102,datanewV_103,datanewV_105)
для (v12 во vlist12) {
v12 = v12[-6]
}
Однако в моем результате datanewV_102,datanewV_103,datanewV_105 остаются неизменными. V12 является копией datanewV_105 и с удалением 6-го столбца.
Как я могу это пересмотреть? если необходимо использовать цикл for?
Ответ №1:
Вам нужно, чтобы ваш вывод также был списком, чтобы иметь возможность хранить все эти отдельные фреймы данных (в вашей текущей версии v12
перезаписывается при каждом появлении цикла).
Это возможно с for
помощью цикла, если вы выполняете цикл по индексу. Например:
datanewV_102 <- data.frame(x = letters[1:10],
y = LETTERS[1:10])
datanewV_103 <- data.frame(x = letters[1:10],
y = LETTERS[1:10])
datanewV_105 <- data.frame(x = letters[1:10],
y = LETTERS[1:10])
datanew_list <- list(datanewV_102,datanewV_103,datanewV_105)
output_list1 <- list()
for(i in seq_along(datanew_list)){
cur_df <- datanew_list[[i]]
output_list1[[i]] <- cur_df[-2]
}
Но здесь, как правило, случай, когда lapply
все становится проще для чтения. Например:
remove_col <- function(df){
df[-2]
}
output_list2 <- lapply(datanew_list, remove_col)
Два решения эквивалентны:
all.equal(output_list1, output_list2)
#> [1] TRUE
Комментарии:
1. Он выдает output_list2 в виде списка желаемых данных. Но эти требуемые фреймы данных не сохраняются как datanewV_102, datanewV_103, datanewV_104. Как я должен переназначить его обратно?
2. Вы уверены, что должны? В каждом случае, который я могу придумать, список более практичен (или, что еще лучше, один фрейм данных с дополнительным столбцом, указывающим происхождение). Если вы действительно хотите иметь отдельные переменные, вы всегда можете назначить их вручную как
out1 <- out_list[[1]]
etc. Одним из способов «обмануть» и получить тот же результат является использованиеattach()
(после присвоения соответствующих имен элементам списка).