2017-02-15 71 views
0

我期待使這更簡潔。我想要一個矩陣「mat」,它具有基於概率返回的二進制數據值(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

'sapply(1:10,function(x)rbinom(100,1,1/x))'? – nrussell

+0

輝煌的工作!我一週只用了一次R,花了4個小時試圖弄清楚這一點,令人尷尬。謝謝 – Aesler

回答

0

你可以使用一個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已經在評論中給出了更好的(在更短的代碼中,更好的性能)回答;)

+0

非常感謝! – Aesler