SORU
25 ŞUBAT 2013, PAZARTESİ


R-Geçerli birden çok bağımsız değişken ile dataframe her satırda işlevi nasıl df her satırdan

Birden çok sütun ile bir dataframe var R. çalışıyorum. Bu dataframe her satır, satır bir fonksiyon çağırmak istiyorum, ve fonksiyonun giriş satır birden çok sütun kullanarak. Örneğin, diyelim ki iki argüman kabul eder: bu verileri ve bu testFunc var

> df <- data.frame(x=c(1,2), y=c(3,4), z=c(5,6))
> df
  x y z
1 1 3 5
2 2 4 6
> testFunc <- function(a, b) a   b

Hadi sütun x ve z için bu testFunc uygulamak istiyorum söylüyorlar. Yani, 1 5, 2 satır için istiyorum sıra 1 2 6 istiyorum. Bir şekilde belki uygulamak fonksiyon ailesi için döngü, yazmadan bunu yapmak için var mı?

Bunu denedim:

> df[,c('x','z')]
  x z
1 1 5
2 2 6
> lapply(df[,c('x','z')], testFunc)
Error in a   b : 'b' is missing

Ama hata var. Herhangi bir fikir? Teşekkürler!

EDİT: aramak istiyorum gerçek işlevi basit bir toplamı değildir, ama güç.t.test. Örnek amaçlar için bir b kullandım. Nihai hedef bu (sözde kod ile yazılmış) gibi bir şey yapabilmek için

df = data.frame(
    delta=c(delta_values), 
    power=c(power_values), 
    sig.level=c(sig.level_values)
)

lapply(df, power.t.test(delta_from_each_row_of_df, 
                        power_from_each_row_of_df, 
                        sig.level_from_each_row_of_df
))

sonuç nereye güç çıkışları vektörüdür.t.df her satırı için test.

CEVAP
25 ŞUBAT 2013, PAZARTESİ


data.frame ** 9, O yüzden .

İçinvectorized fonksiyonlarıdo.call genellikle iyi bir bahistir. Ama bağımsız isimleri devreye girer. Burada testFunc argüman olarak adlandırılır ve x yerine a ve b, y. ... alakasız argümanlar bir hata neden olmadan geçirilecek sağlar:

do.call( function(x,z,...) testFunc(x,z), df )

İçinolmayan vectorized fonksiyonları, mapply çalışır, ama argümanlar sipariş maçı veya açıkça onlara isim vermek gerekir:

mapply(testFunc, df$x, df$z)

Bazen apply tüm argümanlar aynı türde bir matrise data.frame veri tipleri değiştirerek sorun yaratmaz zorlanarak, çok olduğu zaman çalışacaktır. Sizin örnekte, bu tür oldu.

Eğer fonksiyon içine geçirilen bağımsız değişkenler bir işlev içinde çağrılacak ise, bu daha kurnazca bir yöntem yoktur. Eğer bu yolu gitmek istiyorsanız lm() vücudun ilk satırları çalışma.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • CommonArtisan

    CommonArtisa

    7 Temmuz 2012
  • jedimasterkyle

    jedimasterky

    11 ŞUBAT 2006
  • RogerBuckChrist

    RogerBuckChr

    9 Temmuz 2011