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
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.
Nasıl bir Angular.js birden çok bağıms...
afterDelay ile birden çok bağımsız değ...
Nasıl ve bir satırda birden fazla deği...
Nasıl django şablon özel şablon benim ...
Bir yöntem için geçirilen bağımsız değ...