Ссылка на значение индекса столбца в формуле
Я хочу сделать это более кратким. Я хочу одну матрицу "мат", которая имеет двоичные значения данных (0,1), которые возвращаются на основе вероятности. В настоящее время я создал каждый столбец отдельно и буду использовать cbind
Для создания окончательной матрицы:
mat1=matrix(rbinom(100,1,1), 100, 1)
mat2=matrix(rbinom(100,1,1/2), 100, 1)
mat3=matrix(rbinom(100,1,1/3), 100, 1)
mat4=matrix(rbinom(100,1,1/4), 100, 1)
mat5=matrix(rbinom(100,1,1/5), 100, 1)
mat6=matrix(rbinom(100,1,1/6), 100, 1)
mat7=matrix(rbinom(100,1,1/7), 100, 1)
mat8=matrix(rbinom(100,1,1/8), 100, 1)
mat9=matrix(rbinom(100,1,1/9), 100, 1)
mat10=matrix(rbinom(100,1,1/10), 100, 1)
Однако вероятности могут быть определены функцией 1/k, где k - номер по умолчанию индекса столбца, но я не уверен, как ссылаться на индекс столбца. Как это можно упростить? Можно ли использовать функцию для учета всего этого повторения (т.е. k=k+1...).
1 ответ
Вы можете использовать цикл for как "быстрое и грязное" решение:
# setting seed for comparison later on
# set.seed(1111)
# preparing an empty vector
out<-c()
# for-loop
for (k in 1:10){
out<-c(out, rbinom(100,1,1/k))
}
out<-matrix(out, 100, 10)
Здесь k - один на первой итерации, два на второй и т. Д. Все хранится в одном вызванном векторе. Матрица-функция заполняет матрицу столбцами по умолчанию. Таким образом, out представляет собой матрицу 100*10, и каждый столбец принадлежит одному значению k.
Чтобы доказать, что это приводит к той же самой матрице, что и ваш подход:
set.seed(1111)
mat1=matrix(rbinom(100,1,1), 100, 1)
mat2=matrix(rbinom(100,1,1/2), 100, 1)
mat3=matrix(rbinom(100,1,1/3), 100, 1)
mat4=matrix(rbinom(100,1,1/4), 100, 1)
mat5=matrix(rbinom(100,1,1/5), 100, 1)
mat6=matrix(rbinom(100,1,1/6), 100, 1)
mat7=matrix(rbinom(100,1,1/7), 100, 1)
mat8=matrix(rbinom(100,1,1/8), 100, 1)
mat9=matrix(rbinom(100,1,1/9), 100, 1)
mat10=matrix(rbinom(100,1,1/10), 100, 1)
mat<-cbind(mat1,mat2, mat3,mat4,mat5,mat6,mat7,mat8,mat9,mat10)
identical(mat, out)
Функция тождественного должна свидетельствовать о том, что цикл for делает то же самое. Однако для этого может быть столько же способов, сколько и для R-программистов.
Вы можете найти R-Package "вихрем" полезным. Он в интерактивном режиме учит вас, как выполнять такие задачи!
Редактировать: Хорошо, я опоздал. NRussell уже дал лучший (с точки зрения более короткого кода, лучшей производительности) ответ в комментариях;)