For 循环和 'which' 命令
For loop and 'which' command
所以我目前正在尝试获取节点之间的随机初始路径。我试过下面的代码,但有时它 'skips' 一个节点,即有时同一个节点被访问两次而不是遍历每个节点。但是由于我已经将访问节点的 'column' 定义为全 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 的向量传递给样本时,样本的行为会有所不同。观察
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:
来置换索引
sample(seq_len(nrow(A))
所以我目前正在尝试获取节点之间的随机初始路径。我试过下面的代码,但有时它 'skips' 一个节点,即有时同一个节点被访问两次而不是遍历每个节点。但是由于我已经将访问节点的 'column' 定义为全 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 的向量传递给样本时,样本的行为会有所不同。观察
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:
来置换索引sample(seq_len(nrow(A))