我最近帮助获得了一个写随机二进制矩阵的函数,条件是对角线为0。
fun <- function(n){
vals <- sample(0:1, n*(n-1)/2, rep = T)
mat <- matrix(0, n, n)
mat[upper.tri(mat)] <- vals
mat[lower.tri(mat)] <- vals
mat
}
我在这里输入&#39;样本&#39;分别对上下三角形。我想在任何更新的函数中保留它,因为有时我可能希望将每个三角形的转置输入到另一个中。
我想要帮助的是如何在随机矩阵中改变1的频率。我认为,这已经在正常分布范围内变化。例如在9x9矩阵中,要填充的是81-9 = 72个单元格,平均使用的1个是36个。
但是,如果我想创建具有例如概率的矩阵。 p = 0.9,存在1,或者例如p = 0.2有1 ... - 这是怎么做的?
我尝试了一些通过添加概率函数来更改代码(0:1,)部分代码的方法,但我只有错误。
由于
答案 0 :(得分:1)
您应该查看sample
功能
?sample
显示:
用法
样本(x,size,replace = FALSE, prob = NULL )
,其中
<强>概率强>
用于获得元素的概率权重向量 正在采样的矢量。
以及详细信息中的下方,您将看到
可选的prob参数可用于给出权重向量 获得被采样的矢量元素。他们不需要总和 一个,但它们应该是非负的,而不是全部为零。
所以要回答你的问题,除了阅读手册之外,如果你希望prob=c(0.1,0.9)
的第一个元素为0.1,第二个元素为0.9,则使用x
。 / p>