在R中生成正态分布随机抽样矩阵报错,求正确实现方案
问题修正方案
错误原因
- 未预先初始化
x和y对象:R语言不允许直接对不存在的对象的元素进行赋值操作,因此会抛出object x is not found的错误。 - 赋值方式错误:
rnorm(100)生成的是长度为100的向量,原代码中x[i]是尝试将这个向量赋值给单个元素位置,不符合你需要的每列对应一个随机向量的矩阵结构。
修正后的代码
方式一:修正循环逻辑(保留循环写法)
先创建指定维度的空矩阵,再通过循环给每一列赋值:
# 初始化100行、1000列的空矩阵 x <- matrix(nrow = 100, ncol = 1000) y <- matrix(nrow = 100, ncol = 1000) # 循环为每一列生成正态分布样本 for (i in 1:1000) { x[, i] <- rnorm(100, mean = 1, sd = 1) } for (i in 1:1000) { y[, i] <- rnorm(100, mean = 1, sd = 1) }
方式二:向量化生成(推荐,效率更高)
利用R的向量化特性直接生成矩阵,无需循环:
# 直接生成100行1000列的矩阵,每列是长度为100的正态样本 x <- matrix(rnorm(100 * 1000, mean = 1, sd = 1), nrow = 100, ncol = 1000) y <- matrix(rnorm(100 * 1000, mean = 1, sd = 1), nrow = 100, ncol = 1000)
注:rnorm(100*1000)会一次性生成100000个符合要求的正态随机数,matrix()函数会自动将这些数按列填充为指定维度的矩阵,完美匹配你“每列对应一个随机向量”的需求。
内容的提问来源于stack exchange,提问作者CF96
相关产品推荐
相关产品推荐

