为什么 R 在这种情况下会绘制错误的分布?
Why does R plot the wrong distribution in this case?
我对 R 比较陌生,我一直在尝试使用 R 的内置函数 rnorm 和 dnorm 模拟正态分布,然后绘制它。
当我的代码是这样的时候,为什么它绘制了这个错误的密度函数
x <- rnorm(1000, mean=5, sd=2)
hist(x, border='red',freq=F)
y <- curve(dnorm(x,mean(x), sd(x)), add=T)
但是当我的代码是这样的时候,它确实绘制了正确的密度函数
x <- rnorm(1000, mean=5, sd=2)
hist(x, border='red',freq=F)
meanx <- mean(x)
sdx <- sd(x)
y <- curve(dnorm(x,meanx,sdx), add=T)
curve()
不将值向量作为第一个表达式。它需要一个表达式。当你写 dnorm(x)
而 x
是全局环境中的一个对象时,你正在创建一个值向量,而不是表达式。
这令人困惑,你很不走运,因为 x
恰好是 dnorm()
的第一个参数的名称,这就是为什么你的代码运行没有错误,但没有产生预期的结果输出。
如果您 re-name 您的对象 x
是 xx
,那么解决这个问题会变得更加清晰。
然后您的原始代码会抛出错误,因为 dnorm(xx)
不是表达式:
set.seed(1234)
xx <- rnorm(1000, mean=5, sd=2)
hist(xx, border='red',freq=F)
curve(dnorm(xx ,mean(xx), sd(xx)), add=T)
Error in curve(dnorm(xx, mean(xx), sd(xx)), add = T) :
'expr' must be a function, or a call or an expression containing 'x'
但是使用 dnorm()
参数名称 x
以及您的数据 xx
来创建表达式 (dnorm(x, mean(xx), sd(xx))
) 按预期工作:
set.seed(1234)
xx <- rnorm(1000, mean=5, sd=2)
hist(xx, border='red',freq=F)
curve(dnorm(x, mean(xx), sd(xx)), add=T)
我对 R 比较陌生,我一直在尝试使用 R 的内置函数 rnorm 和 dnorm 模拟正态分布,然后绘制它。
当我的代码是这样的时候,为什么它绘制了这个错误的密度函数
x <- rnorm(1000, mean=5, sd=2)
hist(x, border='red',freq=F)
y <- curve(dnorm(x,mean(x), sd(x)), add=T)
但是当我的代码是这样的时候,它确实绘制了正确的密度函数
x <- rnorm(1000, mean=5, sd=2)
hist(x, border='red',freq=F)
meanx <- mean(x)
sdx <- sd(x)
y <- curve(dnorm(x,meanx,sdx), add=T)
curve()
不将值向量作为第一个表达式。它需要一个表达式。当你写 dnorm(x)
而 x
是全局环境中的一个对象时,你正在创建一个值向量,而不是表达式。
这令人困惑,你很不走运,因为 x
恰好是 dnorm()
的第一个参数的名称,这就是为什么你的代码运行没有错误,但没有产生预期的结果输出。
如果您 re-name 您的对象 x
是 xx
,那么解决这个问题会变得更加清晰。
然后您的原始代码会抛出错误,因为 dnorm(xx)
不是表达式:
set.seed(1234)
xx <- rnorm(1000, mean=5, sd=2)
hist(xx, border='red',freq=F)
curve(dnorm(xx ,mean(xx), sd(xx)), add=T)
Error in curve(dnorm(xx, mean(xx), sd(xx)), add = T) :
'expr' must be a function, or a call or an expression containing 'x'
但是使用 dnorm()
参数名称 x
以及您的数据 xx
来创建表达式 (dnorm(x, mean(xx), sd(xx))
) 按预期工作:
set.seed(1234)
xx <- rnorm(1000, mean=5, sd=2)
hist(xx, border='red',freq=F)
curve(dnorm(x, mean(xx), sd(xx)), add=T)