Tôi có một khung dữ liệu với nhiều cột. Đối với mỗi hàng trong khung dữ liệu, tôi muốn gọi một hàm trên hàng và đầu vào của hàm đang sử dụng nhiều cột từ hàng đó. Ví dụ: giả sử tôi có dữ liệu này và testFunc này chấp nhận hai đối số:
> 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
Giả sử tôi muốn áp dụng testFunc này cho các cột x và z. Vì vậy, đối với hàng 1 tôi muốn 1 + 5 và cho hàng 2 tôi muốn 2 + 6. Có cách nào để làm điều này mà không cần viết một vòng lặp for, có thể với họ hàm áp dụng không?
Tôi đã thử điều này:
> 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
Nhưng có lỗi, có ý kiến gì không?
EDIT: hàm thực tế tôi muốn gọi không phải là một tổng đơn giản, mà là power.t.test. Tôi đã sử dụng a + b chỉ cho mục đích ví dụ. Mục tiêu cuối cùng là có thể làm một cái gì đó như thế này (được viết bằng mã giả):
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
))
trong đó kết quả là một vectơ đầu ra cho power.t.test cho mỗi hàng của df.
dplyr
cách.