curve(dnorm(x, mean = 2), from = -3, to = 3)
Функция curve
ищет переменную xname=
(по умолчанию x
) в функции call, поэтому в dnorm(x, mean=2)
он не ссылается на x
в вызывающей среде, это заполнитель для curve
, который используется для повторяющихся значений.
Причина, по которой plot(dnorm, ...)
работает, такова: потому что существует graphics::plot.function
, поскольку dnorm
в этом случае является функцией. Когда вы пробуете plot(dnorm(mean=2))
, dnorm(mean=2)
больше не является функцией, это вызов ... который не работает, потому что требует предоставления x
(его первого аргумента).
Между прочим, plot.function
вызывает curve(...)
, поэтому, помимо удобной функции, очень мало причин использовать plot(dnorm, ...)
вместо curve(dnorm(x), ...)
, кроме, возможно, небольшого кода-гольфа. Самым большим преимуществом curve
является то, что он позволяет вам управлять произвольными аргументами функции dnorm()
, тогда как plot.function
этого не делает.