Мне сложно научиться использовать eval () для оценки функции,
предположим, у меня есть функция:
sq <- function(y){ y**2 }
Вы можете оценить эту функцию следующим образом:
call <- match.call(expand.dots = FALSE)
call[[1]] <- as.name('sq')
call$y <- 0.2
call <- call[c(1,3)]
eval(call)
и это даст вам 0,2 ^ 2 = 0,04
Но если я хочу вычислить что-то вроде sq (y), где y = sin (x), я могу написать:
call <- match.call(expand.dots = FALSE)
call[[1]] <- as.name('sq')
call$y <- as.name('sin')
call$x <- 0.2
call <- call[c(1,3:4)]
eval(call)
это даст мне эту ошибку:
Error in sq(y = sin, x = 0.2) : unused argument (x = 0.2)
Кажется, что R не может распознать x как аргумент греха, но вместо этого аргумент sq.как мы можем сказать R, что x является аргументом греха?
Кроме того, кажется, что R - единственный язык, который я выучил, который использует eval () для оценки функции (я знаю C ++ и Python, но нетвидел этот синтаксис ранее), в чем отличие (или преимущество) для оценки функции таким способом вместо вызова sq (y = sin (x = 0.2))?
Есть ли хорошая книга или учебное пособие, рассказывающее о его использовании и о том, когда использовать между двумя способами?Спасибо!
PS: приведенный выше пример на самом деле является упрощенной версией кода в пакете mlogit, который я изучаю, в котором вероятность входа в журнал возвращается путем вызова lnl.slogit и передается в mlogit.optimи оптимизируемся (строка 407 https://github.com/cran/mlogit/blob/master/R/mlogit.R). Я использовал тот же метод, что и код в пакете, для вызова двух функций, но я получил ошибку выше.