2016-04-01 13 views
0

listenin bir liste uygulanır * Amaçlı:bu formun, bir R (<code>featuresList</code>) vektörlerin bir listesini R

[[2]] 
    [1] 1 0 0 1 1 0 1 1 1 0 1 1 0 1 0 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 0 1 1 0 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 1 1 1 1 0 1 0 0 1 1 1 0 1 1 1 1 1 1 0 1 0 1 0 0 1 0 
[93] 1 0 0 1 0 1 1 1 1 0 0 0 1 1 0 0 1 0 0 1 1 0 1 0 1 0 1 1 0 0 1 0 0 0 1 1 1 1 0 0 1 1 0 1 1 0 1 1 1 0 0 1 1 1 1 0 0 1 0 1 1 1 0 1 1 0 0 1 1 0 1 1 0 1 1 1 1 0 1 1 1 1 1 1 1 0 1 0 1 0 0 0 
[[3]] 
    [1] 0.64285714 0.74285714 0.78571429 0.57142857 0.60000000 0.68571429 0.67142857 0.64285714 0.74285714 0.71428571 0.57142857 0.42857143 0.72857143 0.54285714 0.64285714 0.65714286 
[17] 0.57142857 0.70000000 0.47142857 0.64285714 0.47142857 0.70000000 0.57142857 0.62857143 0.57142857 0.78571429 0.61428571 0.57142857 0.50000000 0.57142857 0.74285714 0.62857143 

I ile bir liste her öğe Özetle bilgileri bu for sahip onun diğer listedeki ilgili öğe. Yukarıdaki örnekte, [[2]] listesinin iki listesi vardır, bu listenin her bir öğesini [[3]] listesindeki öğelerle birlikte toplamak istiyorum. Bu yüzden, [[2]][1] numaralı telefonu 1 [[3]][1] numaralı telefon numarasınanumaralı telefonla topladım, sonuç 1.64285714. İlk bakışta

Bu döngü ile geldi:

features <- 0 
    for(i in seq_along(featuresList)){ 
    if(!(is.null(featuresList[[i]]))) 
     features<-features+ unlist(featuresList[[i]]) 
    } 

Ve tam çalışır:

[1] 1.6428571 0.7428571 0.7857143 1.5714286 1.6000000 0.6857143 1.6714286 1.6428571 1.7428571 0.7142857 1.5714286 1.4285714 0.7285714 1.5428571 0.6428571 1.6571429 1.5714286 0.7000000 
[19] 1.4714286 1.6428571 1.4714286 0.7000000 1.5714286 1.6285714 1.5714286 0.7857143 1.6142857 1.5714286 1.5000000 1.5714286 0.7428571 1.6285714 1.6142857 0.7857143 1.5285714 1.5714286 

Bu ilgili unsurlarının vektörlerin ilk listenin her elemanını toplanmasıdır vektörlerin ikinci listesi. Ama ben günlerce bu kodu yazmak için denedim * hayır şans ile uygulayın.

Herhangi biri nasıl yapılacağına dair bir ipucu verebilir mi? Ben senin soru doğru anlasalardı

+3

:

Ben senin veri alt kümesini kullandık. Bir listede iki vektör görüyorum. – Roland

+0

@Roland, üzgünüm, düzeltildi. – elbaulp

cevap

3

, sadece listedeki vektörleri ekleyebilirsiniz - *apply fonksiyonlarını kullanmadan: Biz listedeki tüm vektörleri eklemek istiyorsanız

featuresList[[2]] + featuresList[[3]] 
#[1] 1.6428571 0.7428571 0.7857143 1.5714286 1.6000000 0.6857143 1.6714286 1.6428571 1.7428571 0.7142857 1.5714286 1.4285714 0.7285714 

, biz Reduce() kullanabilirsiniz gibi @akrun önerdiği:

Reduce("+", featuresList) 
#[1] 2.642857 1.742857 1.785714 2.571429 2.600000 1.685714 2.671429 2.642857 2.742857 1.714286 2.571429 2.428571 1.728571 

Bu

listedeki tüm vektörlerin toplamı geçer (bu durumda featuresList[[1]] unutmayın olan ihtiva eden bir (dönüştürülmüş) vektörü sadece 1). Ben sorunuzu listelerin bir listesini görmüyorum

featuresList <- list(1, c(1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0), c(0.64285714, 
0.74285714, 0.78571429, 0.57142857, 0.6, 0.68571429, 0.67142857, 
0.64285714, 0.74285714, 0.71428571, 0.57142857, 0.42857143, 0.72857143)) 
+0

Ama sorun şu ki listenin uzunluğu 2'den büyük, yani burada [[2]] ve [[3]] kullanıyorsunuz, fakat pratikte herhangi bir boyutta olabilir. Bu yüzden onu n uzunluğundaki liste listemize genellemek istiyorum. Bir matris olarak (nx386), n'in sahip olduğum liste sayısıdır ve 386 her alt listenin boyutudır (Hangisi gerçekten sabittir) – elbaulp

+0

@akrun, fakat bir sayıya düşürmek istemiyorum. alt listelerdeki elemanlar kadar çok sayı ister. – elbaulp

+2

veya 'colSums (do.call (rbind, featuresList [2: 3]))' birçok liste öğesi için 'Reduce''dan daha hızlı olmalıdır. Bu değerler muhtemelen bir matriste olmalı. – Roland