Подтвердить что ты не робот

Использование lapply для применения функции по списку кадров данных и сохранения вывода в файлы с разными именами

У меня есть список фреймов данных и дал каждому элементу в списке (например, каждый кадр данных) имя:

например.

df1 <- data.frame(x = c(1:5), y = c(11:15))  
df2 <- data.frame(x = c(1:5), y = c(11:15))  
mylist <- list(A = df1, B = df2)  

У меня есть функция, которую я хочу применить к каждому кадру данных; В этой функции я хочу включить строку для записи результатов в файл (в конечном итоге я хочу делать более сложные вещи, такие как сохранение графиков корреляции между двумя переменными для каждого кадра данных, но я думал, что начну просто)

например.

NewVar <- function(mydata, whichVar, i) {  
mydata$newVar <- mydata[, whichVar] + 1  
write.csv(mydata, file = i)  
}

Я хочу использовать lapply() для применения этой функции к каждому кадру данных в моем списке

что-то вроде:

hh<-lapply(mylist, NewVar, whichVar = "y")

Я не могу понять, как назначить "i" в контексте lapply, чтобы i выполнял итерации над именами в списке кадров данных, сохраняя несколько файлов с разными именами (в этом случае два файла названные A и B), которые соответствуют модифицированным кадрам данных.

4b9b3361

Ответ 1

Он будет работать со следующим вызовом lapply:

lapply(names(mylist), function(x) NewVar(mylist[[x]], "y", x))

Ответ 2

Есть много вариантов. Например:

  lapply(names(mylist),
         function(x)write.csv(mylist[x],
                              file =paste0(x,'.csv')))

или используя индексы:

 lapply(seq_along(mylist),
     function(i)write.csv(mylist[i],
                          file =paste0(names(mylist)[i],'.csv')))