pond_matriz<-matrix(c(0,17.6,18.3,9.1,6.1,12.3,4.5,9.4,
+ 0,0,173.4,10.6,5.4,20.3,4.0,9.9,
+ 0,149.4,0,10.9,5.3,22.5,3.7,10.2,
+ 0,6.9,8.3,0,6.2,14.5,3.9,17.8,
+ 0,4.2,4.7,7.3,0,5.3,14.4,13.4,
+ 0,14.9,19.3,16.3,5.3,0,3.4,11.5,
+ 0,4.4,4.8,6.5,21.7,5.3,0,10.8,
+ 0,3.2,3.8,9.0,5.7,5.1,3.1,0),nrow=8, byrow=T)
pond0<-pond_matriz[1,]
pond1<-pond_matriz[2,]
pond2<-pond_matriz[3,]
pond3<-pond_matriz[4,]
pond4<-pond_matriz[5,]
pond5<-pond_matriz[6,]
pond6<-pond_matriz[7,]
pond7<-pond_matriz[8,]
f1<- function(line,cost,k){ #cost is not used yet
if(k!=0){
# is.integer(k)
new_line<-line[-c(k)]
pos<-(which.is.max(pond1)-1)
cat("go to position",pos,"\n")
}
if(k==0){
pos<-(which.is.max(line)-1)
cat("go to position",pos,"\n")
}
}
当我想从位置0(池塘0)出发时,我这样做;
> g<-c(0) # I dont want to go from 0 to 0
> f1(pond0,0,g)
go to position 2 #18.3
> pond0
[1] 0.0 17.6 **18.3** 9.1 6.1 12.3 4.5 9.4
这很好,然后我做;
> g<-c(0) #Dont want to return yet to position 0
> f1(pond2,0,g)
go to position 1 #149.4
> pond2
[1] 0.0 **149.4** 0.0 10.9 5.3 22.5 3.7 10.2
这里,它也很好,然后;
> g<-c(3) #pos2
> f1(pond1,0,g)
go to position 4
> pond1
[1] 0.0 0.0 *173.4* 10.6 5.4 **20.3** 4.0 9.9
这是我的问题,我知道我说要删除 173.4 ,但我只是想要pos2不被考虑因为我已经通过那里,我想知道我该怎么做才能说“转到第5位”。我怎么能认为20.3(因为173.4是pos2而我已经去过那里)是最大的而不改变他的位置
答案 0 :(得分:1)
当然有更好的方法可以做到这一点,但这个方法适用于您的代码:
f1<- function(line,cost,k){ #cost is not used yet
if(k!=0){
# is.integer(k)
new_line<-c(rep(NA,k),line[(k+1):length(line)])
pos<-(which.max(new_line)-1)
cat("go to position",pos,"\n")
}
if(k==0){
pos<-(which.max(line)-1)
cat("go to position",pos,"\n")
}
}
new_line 现在是一个矢量,其中包含您想要跳过的位置的NA值而不会丢失剩余值的位置
您的示例的结果如下:
> g<-c(0)
> f1(pond0,0,g)
go to position 2
> pond0
[1] 0.0 17.6 **18.3** 9.1 6.1 12.3 4.5 9.4
>
> g<-c(0)
> f1(pond2,0,g)
go to position 1
> pond2
[1] 0.0 **149.4** 0.0 10.9 5.3 22.5 3.7 10.2
>
> g<-c(3)
> f1(pond1,0,g)
go to position 5
> pond1
[1] 0.0 0.0 173.4 10.6 5.4 **20.3** 4.0 9.9
我已经切换到基本包中的which.max函数,因为我没有你使用的那个。
希望它可以帮到你!