2011-01-25 35 views
8

Bir tarih sütunu, bir fiyat sütunu ve bir dönüş sütunu içeren 4 veri çerçevem ​​var.Her veri çerçevesine bir işlev uygulayın

data.1:

Date  Price Return 
2009-01-02 100 0.2 
2009-01-03 110 0.1 
etc. 

veri yoktur.2:

Date  Price Return 
2009-02-02 60 0.15 
2009-02-03 50 -0.1 
etc. 

I yoğunluk değerlerini dönen bir döngü kurmak ve her bir veri çerçevesi() işlev yoğunluğu uygulamak istiyorum dönüşler için. Bir liste oluşturarak bir döngü kurma ve lapply kullanımı hakkında() bunu yapmak yoluyla

ben yüzden

> ff <- list(data.1, data.2, data.3, data.4) 
> for(i in 1:length(ff){ 
     density[[i]] <- lapply(ff, density(ff[[i]]$Return))} 

ama bu besbelli çalışmıyor. Biri bana biraz yardım teklif edebilir mi? Manuel atama yapmak istiyorsanız Dani

cevap

10

İlk olarak, yoğunluğu başlatmak gerektiğini - önceden

teşekkürler.

densities <- list() 

İkinci olarak, yoğunluk işlevini komik bir şekilde kullanırsınız. Lapa'nizde farklı bir işlev belirtmelisiniz. Komuttan sonra işlevi ve ek argümanları verirsiniz, ya da aşağıda gösterildiği gibi, kendi özel küçük işlevinizi gecikme çağrısı içinde yaparsınız.

data.1 <- data.frame(
    X1 = letters[1:10], 
    X2 = 1:10 
) 

data.2 <- data.frame(
    X1 = letters[11:20], 
    X2 = 10:1 
) 

ff <- list(data.1,data.2) 

densities <- lapply(ff,function(i) {density(i$X2)}) 

Bu, otomatik olarak bir liste döndürür. siz de isimlerini kullanabilirsiniz

densities[[1]]$x 

önce listenizi adında Eğer:

names(ff) <- c("data.1","data.2") 

densities <- lapply(ff,function(i) {density(i$X2)}) 
densities[['data.1']]$x 
+0

Üzgünüz, anlamıyorum. Bir değer hangi yoğunluğu? – Dani

+0

@Dani: Üzgünüm, hatam, yanlış okudum –

+0

Sorun değil, çözüm için teşekkürler. İyi çalışıyor! Kalan sorularım var: Artık yoğunluk() hesaplanan değerlere nasıl erişebilirim? Mesela, sadece benim için hesaplanan yoğunluğun x değerlerini (hangisi iadeler) seçmek istiyorum. Yoğunluklar [[1]] sadece veri için sonuçları seçer.1. Şimdi sadece verilerin enterpolasyonlu x değerlerini seçebilirim.1? yoğunlukları [[1 $ x]] çalışmıyor ... – Dani

3

şey

sadece liste endeksi kullanmak, bunun dışında veri almak için lapply ile bir for döngüsü kullanmanız gerekmiyor. Bu çalışması gerekir:

data.1=data.2=data.3=data.4=matrix(rnorm(30),ncol=3) 

ff=list(data.1,data.2,data.3,data.4) 

densities=lapply(ff,function(x)density(x[,3])) 

kuşkusuz (Ben listenin elle atama ortalaması) Bunu yapmak için daha iyi bir yolu olmasa da.

İlgili konular