为什么红色曲线不与绿色curve()
重叠?
我注意到,如果将操作保存在中间对象上,然后将这些对象传递给curve()
函数,它将毫无问题地工作。我的兴趣是通过在curve()
中进行操作来了解为什么它不起作用。我觉得很好奇。
set.seed(1L)
x <- rnorm(n = 1e3L, mean = 200, sd = 30)
hist(x, probability = TRUE, ylim = c(0, 0.015))
curve(dnorm(x = x, mean = 200, sd = 30), col = "black", lty = 1, lwd = 2, add = TRUE) # OK
curve(dnorm(x = x, mean = 199.6506, sd = 31.04748), col = "green", lty = 1, lwd = 2, add = TRUE) # OK
curve(dnorm(x = x, mean = mean(x), sd = sd(x)), col = "red", lty = 1, lwd = 2, add = TRUE) # ?
答案 0 :(得分:0)
正在发生的是,最后一个图未使用
的值set.seed(1L)
x <- rnorm(n = 1e3L, mean = 200, sd = 30)
mean(x)
#[1] 199.6506
sd(x)
#[1] 31.04748
用于绿色曲线。
从函数curve
的文档中(我的重点):
函数或表达式expr(对于曲线)或函数x(对于绘图) 在n个点上进行平均评估,该点在[从,到] 范围内平均分布。的 然后绘制以此方式确定的点。
如果from或to为NULL,则默认为对应的元素 xlim(如果不为NULL)。
当from / to和xlim均未指定两个x限制时,会发生什么情况 一个复杂的故事。对于plot()和曲线(add = FALSE), 默认值为(0,1)。对于curve(add = NA)和curve(add = TRUE) 默认值取自上一个图的x限制。(此 与2.14.0之前的R版本不同。)
以下功能显示了文档中的内容。它输出根据传递给函数的向量计算出的min(x)
,max(x)
(x限制)以及mean(x)
和sd(x)
的值。
下面的值length.out = 101
是默认值n = 101
。
xx <- seq(100, 320, length.out = 101)
mean(xx)
#[1] 210
sd(xx)
#[1] 64.46038
f <- function(x) {
cat("Inside the function:\n")
cat("min(x):", min(x), "\tmax(x):", max(x), "\n")
cat("mean(x):", mean(x), "sd(x):", sd(x), "\n")
dnorm(x, mean = mean(x), sd = sd(x))
}
hist(x, probability = TRUE, ylim = c(0, 0.015))
curve(dnorm(x = x, mean = 200, sd = 30), col = "black", lty = 1, lwd = 2, add = TRUE) # OK
curve(dnorm(x = x, mean = 199.6506, sd = 31.04748), col = "green", lty = 1, lwd = 2, add = TRUE) # OK
cat("Outside the function:\nmin(x):", min(x), "\tmax(x):", max(x), "\n\n")
#Outside the function:
#min(x): 109.7585 max(x): 314.3083
curve(f(x), col = "red", lty = 1, lwd = 2, add = TRUE) # ?
#Inside the function:
#min(x): 100 max(x): 320
#mean(x): 210 sd(x): 64.46038
这些值是预期值,已记录为行为。
最后是剧情。