Ниже, вероятно, может быть сделано менее чем мои 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
в своем вопросе.
- Прежде всего
rnorm(20*3)
идентичен rnorm(60)
, и он будет производить вектор 60 значений из стандартного нормального распределения.
- Когда вы используете
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
где n
и m
являются количество rows
и columns
матрицы соответственно. В вашем случае ваш number_of_elements_in_matrix
равен 60, а номер столбца - 50. Следовательно, количество строк должно быть 60/50 = 1,2 строки. Однако десятичное число строк не имеет никакого смысла и, следовательно, вы получаете ошибку. Поскольку вы выбрали 50 столбцов, только кратные 50 будут приниматься как number_of_elements_in_matrix
. Надеюсь, это ясно!