2017-02-15 75 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