如何解决为什么在这种情况下R绘制错误的分布?
我对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,freq=F)
meanx <- mean(x)
sdx <- sd(x)
y <- curve(dnorm(x,meanx,sdx),add=T)
解决方法
curve()
并不将值向量作为第一个表达式。它需要一个表达式。在dnorm(x)
是全局环境中的对象的情况下编写x
时,您正在创建值的向量,而不是表达式。
这令人困惑,并且您不走运,因为x
恰好是dnorm()
的第一个参数的名称,这就是为什么您的代码运行时没有错误,但不会产生预期的输出。
如果您将对象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,add = T) :
'expr' must be a function,or a call or an expression containing 'x'
但是使用dnorm()
参数名称x
和数据xx
创建表达式(dnorm(x,sd(xx))
)可以按预期工作:
set.seed(1234)
xx <- rnorm(1000,freq=F)
curve(dnorm(x,add=T)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。