这里具体描述一下问题:我拥有一个邻接矩阵。其中1表示两者有联系,0表示没有联系。(因而邻接矩阵对角线全为1)现在倘使我有1000*1000的矩阵。(所以有1000个相互关联的用户)我需要运用滚雪球方法从中抽出100个用户。实施方法如下:1.随机抽取一个用户N1;2.搜寻与这用户有关联的所有用户(即元素为1),抽出。N2;3.从上一步抽取的用户中,搜寻与这些用户有关联的所有用户。重复以上过程直至满足我规定的样本量。若超出规定的样本量,则在最后一次抽取时采用简单随机不放回的方式丢掉最后的一些用户。
我其实自己写了这一函数,但运行速度很慢。心想这类问题应该有成熟的函数,所以求问。
snow=function (x,size,...){
mm=0
ai=0
n=size
ii=sample(1:N,size=1) ##first i
i=which(x[,ii]==1) ##back to the connected nodes
ai=unique(c(i,ii)) ##ind
while (mm<n){
mm=length(ai) ##sample size
ii=i
i=unique(unlist(apply(as.matrix(x[,ii]),2,which1,0)))
ai=unique(c(i,ai)) ##ind
}
if (mm==n){
ind=ai}
else {
ind=ai[sample(1:mm,n)] ##??????????????????????
}
return(ind)
}