Почему я получаю эту ошибку «Ошибка в FUN (newX [, i], ...): отсутствует аргумент« cla », по умолчанию нет» - PullRequest
1 голос
/ 06 апреля 2020

Я пытаюсь применить функцию к ряду входов, и у меня появляется эта ошибка. Я не понимаю, почему, поскольку считаю, что я передаю значения «cla» в предоставленном мною кадре. Извините, если это слишком базовый вопрос, но я не могу понять. Ниже приведен воспроизводимый пример.

Выходные данные, которые мне нужны, это responseRate для каждой строки фрейма данных «input».

Заранее спасибо.

inputs <- data.frame(P=c(0, 50, 80, 100),
                     pd=c(38, 50, 50, 86),
                     cla=c(15, 40, 30, 81))

eq1 <- function(a,b,c,x){
        (a*exp(-((((exp(b)*x))/1000))+c+b))/1000
}

resp.function <- function(pd, cla, eq1, P){
        a <- 70 + pd*80 + cla*80
        b <- 1
        c <- 70 + pd*10
        responseRate <- eq1(a,b,c,P)
        return(responseRate)
}


apply(inputs, 1, resp.function)

1 Ответ

2 голосов
/ 06 апреля 2020

Вам не нужно передавать eq1 в resp.function.

resp.function <- function(pd, cla, P){
   a <- 70 + pd*80 + cla*80
   b <- 1
   c <- 70 + pd*10
   responseRate <- eq1(a,b,c,P)
   return(responseRate)
}

Кроме того, ваша функция векторизована, поэтому вы можете сделать:

resp.function(inputs$P, inputs$pd, inputs$cla)

Если функция не векторизована, вы можете использовать mapply, чтобы применить ее к каждому значение в строке.

mapply(resp.function, inputs$P, inputs$pd, inputs$cla)
...