Постройте нормальное распределение в R с указанными c параметрами - PullRequest
0 голосов
/ 20 июня 2020

Я хотел бы построить что-то вроде этого:

plot(dnorm(mean=2),from=-3,to=3)

Но это не работает, как если бы вы:

plot(dnorm,from=-3,to=3)

в чем проблема?

Ответы [ 2 ]

4 голосов
/ 20 июня 2020

Ответ, который вы получили от @ r2evans, отличный. Вы также можете подумать об изучении ggplot, поскольку в конечном итоге это, вероятно, сделает вашу жизнь намного проще. В этом случае вы можете использовать stat_function, который отобразит результаты произвольной функции по сетке переменной x. Он принимает аргументы функции в виде списка.

library(ggplot2)
ggplot(data = data.frame(x=c(-3,3)), aes(x = x)) + 
  stat_function(fun = dnorm, args = list(mean = 2))

enter image description here

4 голосов
/ 20 июня 2020
curve(dnorm(x, mean = 2), from = -3, to = 3)

normal plot

Функция 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 этого не делает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...