Saya memiliki kerangka data dengan banyak kolom. Untuk setiap baris dalam kerangka data, saya ingin memanggil fungsi di baris, dan input fungsi menggunakan beberapa kolom dari baris itu. Sebagai contoh, katakanlah saya memiliki data ini dan testFunc ini yang menerima dua argumen:
> 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
Katakanlah saya ingin menerapkan testFunc ini ke kolom x dan z. Jadi, untuk baris 1 saya ingin 1 + 5, dan untuk baris 2 saya ingin 2 + 6. Apakah ada cara untuk melakukan ini tanpa menulis perulangan for, mungkin dengan fungsi yang berlaku keluarga?
Saya mencoba ini:
> 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
Tapi ada kesalahan, ada ide?
EDIT: fungsi sebenarnya yang ingin saya panggil bukanlah jumlah yang sederhana, tetapi itu adalah power.t.test. Saya menggunakan + b hanya untuk tujuan contoh. Tujuan akhirnya adalah untuk dapat melakukan sesuatu seperti ini (ditulis dalam pseudocode):
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
))
di mana hasilnya adalah vektor output untuk power.t.test untuk setiap baris df.
dplyr
caranya.