2013-06-10 28 views
23

farklı isimlerle dosyalara çıktı tasarrufu:veri çerçevelerinin liste üzerinde bir işlevi uygulamak için lapply kullanma ve veri çerçevelerinin bir listesi var ve (örneğin her veri çerçevesi) bir isim listesindeki her eleman verdik

Örneğin

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) 

Her veri çerçevesine uygulamak istediğim bir işlev var; Bu işlevde, ben sonuç dosyaya yazmak için bir satır eklemek istediğiniz (Ben her veri çerçeve için iki değişken arasındaki korelasyonun araziler tasarrufu gibi daha karmaşık şeyler yapmak istiyorum sonunda ama basit başlardım düşünce)

Örneğin

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

Ben

gibi bir şey benim listedeki her bir veri çerçevesi için bu işlevi uygulamak için lapply() kullanmak istiyorum:

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

Ben nasıl atanacağı bilemiyorum "i" i, i, veri çerçeveleri listesindeki adlar üzerinde yinelenen, farklı adlara sahip birden fazla dosya kaydetme (bu durumda, A ve B olarak adlandırılan iki dosya) değiştirilmiş dala karşılık gelir. ta çerçeveleri.

+1

Ben size bir for döngüsü kullanarak engellemeye çalışıyoruz söylediğini biliyorum Örneğin ama bence bu durumda bir for döngüsü kullanmak doğru. Hiçbir şey iade edilmezse, "lapply()" yi kullanmayı sevmem. 'Plyr' paketinden l_ply() gibi bir şey muhtemelen daha uygun. Ya da sadece bir döngü için. – MadScone

cevap

7

Aşağıdaki lapply çağrısı ile çalışacaktır:

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

Çok seçenek var.

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

veya kullanan endeksleri:

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

Cevabınız için teşekkürler ... Ancak, bu iki seçeneği de denedim ve onlar, lapply komutunun dışında tanımlanmış bir işlev için çalışmıyorlar. Gerçek fonksiyonumun bir dizi analiz yapması ve ardından tüm sonuçları kaydetmesi gerekiyor, böylece bir satırda tanımlamak için bir seçenek yok. – user2414840

İlgili konular