У мене є кадр даних з кількома стовпцями. Для кожного рядка в кадрі даних я хочу викликати функцію в рядку, а для введення функції використовується декілька стовпців із цього рядка. Наприклад, скажімо, у мене є ці дані і цей testFunc, який приймає два аргументи:
> 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
Скажімо, я хочу застосувати цей testFunc до стовпців x і z. Отже, для рядка 1 я хочу 1 + 5, а для рядка 2 - 2 + 6. Чи є спосіб це зробити без написання циклу для циклу, можливо, із сімейством функцій застосувати?
Я спробував це:
> 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
Але помилилися, якісь ідеї?
EDIT: фактична функція, яку я хочу викликати, - це не проста сума, але це power.t.test. Я використовував + b лише для прикладних цілей. Кінцева мета - вміти робити щось подібне (написане псевдокодом):
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
))
де результат - вектор виходів для power.t.test для кожного ряду df.
dplyr
спосіб.