如何在R语言中计算rnorm数据集的均值及正确生成50组正态分布样本均值并绘制直方图
Hey there! Let's work through your R questions one by one:
问题1:计算rnorm生成数据集的均值
计算rnorm()生成的数据集的均值非常直接,只需要用R内置的mean()函数即可。举个简单例子:
# 生成100个均值为0、标准差为1的正态随机数 my_data <- rnorm(100, mean = 0, sd = 1) # 计算均值 data_mean <- mean(my_data) print(data_mean)
问题2:生成50组数据集并绘制均值的直方图
首先咱们来分析你之前代码的问题:
- 第一个方法的错误根源:
你写的matrix(rnorm(30,0,sqrt(2)), nrow=30, ncol=50)只生成了30个随机数,然后把这30个数重复填充到了50列里,所以每一列的数值完全相同,计算出来的均值自然也一模一样。要生成50组各30个的随机数,你需要让rnorm()生成30*50=1500个不同的随机数,再构建矩阵。 - 第二个方法的问题:
你定义nx=rep(0,n)但没有给n赋值,只要把n设为50,这个方法其实是可以正常运行的。
正确的for循环实现方法
如果你只想用for循环来得到50个mean(rnorm(30,0,sqrt(2)))的结果,下面是正确的代码:
# 设定组数 num_groups <- 50 # 初始化存储均值的向量 mean_vector <- rep(0, num_groups) # 循环生成每组数据并计算均值 for (i in 1:num_groups) { # 生成一组30个符合要求的随机数 group_data <- rnorm(30, mean = 0, sd = sqrt(2)) # 计算该组的均值并存储 mean_vector[i] <- mean(group_data) } # 绘制直方图,添加数值标签 hist(mean_vector, labels = TRUE)
也可以用矩阵方法修正后的版本
如果你想用矩阵的方式来实现,修正后的代码如下:
# 生成50组各30个随机数,共1500个 x <- matrix(rnorm(30*50, mean = 0, sd = sqrt(2)), nrow = 30, ncol = 50) # 计算每一列的均值(每一列对应一组数据) mean_vector <- apply(x, 2, mean) # 绘制直方图 hist(mean_vector, labels = TRUE)
这两种方法都能得到你想要的50个均值的直方图,结果是一致的~
内容的提问来源于stack exchange,提问作者Jellybean
相关产品推荐
相关产品推荐

