Если мы применяем функцию к каждой строке, используйте apply
.Кроме того, вместо указания элементов строки один за другим в качестве аргументов (поскольку они могут различаться для каждого набора данных), используйте ...
, который может принимать любое количество элементов в качестве аргументов, и создайте matrix
из него
chisquare.tableMod <- function(...){
t <- matrix(c(...), nrow = 2)
chisq.test(t)
}
out <- apply(df1, 1, chisquare.tableMod)
Тестирование с выходом из функции OP
chisquare.table <- function(var1, var2, var3, var4){
t <- matrix(c(var1, var2, var3, var4), nrow = 2)
chisq.test(t)
}
outOld <- chisquare.table(80, 99920, 85, 99915)
identical(out[[1]], outOld)
#[1] TRUE
Как указано в комментариях @ 42-, apply
возвращает matrix
, а матрица может содержать только один класс.Поэтому выбирайте только те столбцы, которые numeric
при работе с apply
(или только с одним классом)
data
df1 <- data.frame(v1 = c(80, 79, 49), v2 = c(99920, 98230, 43240),
v3 = c(85, 40, 35), v4 = c(99915, 43265, 43238))