使用 rnorm() 生成数据集

Using rnorm() to generate data sets

我需要生成一个数据集,其中包含 3 个类中的 20 个观察值(每个类 20 个观察值 - 总共 60 个)和 50 个变量。我试图通过使用下面的代码来实现这一点,但是它抛出了一个错误,我最终创建了 50 个变量的 2 个观察值。

data = matrix(rnorm(20*3), ncol = 50)
Warning message:
In matrix(rnorm(20 * 3), ncol = 50) :
data length [60] is not a sub-multiple or multiple of the number of columns [50]

我想知道哪里出错了,或者这是否是生成数据集的最佳方法,以及对可能解决方案的一些解释,以便我可以更好地理解将来如何做到这一点。

下面的代码可能少于我的 3 行代码就可以完成,但我想保持简单,我还想使用您似乎熟悉的 matrix 函数:

#for the response variable y (60 values - 3 classes 1,2,3  - 20 observations per class)
y <- rep(c(1,2,3),20 ) #could use sample instead if you want this to be random as in docendo's answer

#for the matrix of variables x
#you need a matrix of 50 variables i.e. 50 columns and 60 rows i.e. 60x50 dimensions (=3000 table cells)
x <- matrix( rnorm(3000), ncol=50 )

#bind the 2 - y will be the first column 
mymatrix <- cbind(y,x)

> dim(x) #60 rows , 50 columns
[1] 60 50
> dim(mymatrix) #60 rows, 51 columns after the addition of the y variable
[1] 60 51

更新

我只是想更具体地说明您在问题中尝试 matrix 时遇到的错误。

  1. 首先 rnorm(20*3)rnorm(60) 相同,它将根据标准正态分布生成一个包含 60 个值的向量。
  2. 当您使用 matrix 时,除非用 byrow 参数另行指定,否则它会按列填充值。正如文档中提到的那样:

If one of nrow or ncol is not given, an attempt is made to infer it from the length of data and the other parameter. If neither is given, a one-column matrix is returned.

而推断它的逻辑方法是通过等式 n * m = number_of_elements_in_matrix 其中 nmrowscolumns 的数量矩阵分别。在您的情况下,您的 number_of_elements_in_matrix 为 60,列号为 50。因此,行数必须为 60/50=1.2 行。但是,十进制行数没有任何意义,因此您会收到错误消息。由于您选择了 50 列,因此只有 50 的倍数将被接受为 number_of_elements_in_matrix。希望这很清楚!