Używanie lapply do zastosowania funkcji nad listą ramek danych i zapisywanie danych wyjściowych do plików o różnych nazwach

Mam listę ramek danych i nadałem każdemu elementowi na liście (np. każdej ramce danych) nazwę:

Np.

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)  

Mam funkcję, którą chcę zastosować do każdej ramki danych; w tej funkcji chcę dołączyć linię do zapisu wyników do pliku (w końcu chcę zrobić bardziej skomplikowane rzeczy, takie jak zapisywanie Wykresów korelacji między dwiema zmiennymi dla każdej ramki danych, ale pomyślałem, że zacznę prosto)

Np.

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

I want to use lapply() to apply this funkcja do każdej ramki danych na mojej liście

Coś w stylu:

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

Nie mogę zrozumieć, jak przypisać " i " w kontekście lapply, aby i iterował nad nazwami na liście ramek danych, zapisując wiele plików o różnych nazwach (w tym przypadku dwa pliki o nazwach A i B), które odpowiadają zmodyfikowanym ramkom danych.

Author: MERose, 2013-06-10

2 answers

Będzie działać z następującym wywołaniem lapply:

lapply(names(mylist), function(x) NewVar(mylist[[x]], "y", x))
 8
Author: Sven Hohenstein,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-10 06:52:21

Istnieje wiele opcji. Na przykład:

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

Lub używając indeksów:

 lapply(seq_along(mylist),
     function(i)write.csv(mylist[i],
                          file =paste0(names(mylist)[i],'.csv')))
 11
Author: agstudy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-10 06:49:41