for循环和'which'命令

时间:2015-02-26 01:34:21

标签: r for-loop which

所以我现在正试图在节点之间获得随机的初始路径。我已经尝试了以下代码,但有时它会“跳过”一个节点i,有时同一个节点被访问两次而不是遍历每个节点。但是因为我已经将访问节点的'列'定义为全0,所以我不明白为什么在使用which(> 0)命令时会发生这种情况。有什么建议吗?

A<-matrix(sample(1:15,25,replace=TRUE), ncol=5) 

n=nrow(A)

b=c()
a=c(1:nrow(A))
b[1]=sample(a,1)

for(i in 2:n){
A[,b[i-1]]<-rep(0,n)
d=which(A[b[i-1],]>0)
b[i]=sample(d,1)
}

print(b)

1 个答案:

答案 0 :(得分:4)

问题是当您向其传递长度为1的向量时,样本的行为会有所不同。观察

set.seed(14)
x<-c(5,3)
sample(x, 1)
# [1] 5
x<-5
sample(x, 1)
# [1] 4

你看到样本返回4.当你传入一个长度为1的向量时,它从1:x绘制。如果您愿意,可以编写自己的包装器

Sample<-function(x,n ) {
    if(length(x)>1) 
         sample(x,n)
    else if (length(x)==1 & n==1) {
         x
    } else {
        stop("error")
    }
}

然后使用此功能。

但看起来你只是在洗牌。为什么不通过一次调用样本来置换索引:

sample(seq_len(nrow(A))