R-从矩阵中获得向量中的最大值的位置

时间:2017-04-26 14:29:38

标签: r

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而我已经去过那里)是最大的而不改变他的位置

1 个答案:

答案 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函数,因为我没有你使用的那个。

希望它可以帮到你!