1

私はRを初めて使用するので、いくつかの情報が欠けている可能性がありますが、この動作に頭を悩ませることはできません:

neighbors<-function(topo,usr){
  n = NULL
  for (i in 1:length(topo[,1])){
    if (topo[i,1] == usr){
      n <- append(n,topo[i,2])
    }
  }
return(n)
}

どこtopoに次の構造があります:

 2l59mm6jc8pae32vilsr99ljp0 40iml67hpjsr8o1oo7f4oin706
 3359mm6jc8pae32vilsr99ljp0 411iml67hpjsr8o1oo7f4oin706
 ...

私がやりたいことは、最初の列をループして、最初の列usrからの一致を確認し、2 番目の列の内容を に追加してn返すことです。

何が起こるかというと、出力にいくつかの数値が表示されます:1916. デバッグしようとすると、次の答えが得られました。

   [1] vi4govpcqjnf6imquadf9ae4f0
   20 Levels: 2l59mm6jc8pae32vilsr99ljp0 40iml67hpjsr8o1oo7f4oin706 ... vvqp3im2g3r90ibv56817asfq7
   [1] 19
   [1] nb9b1vh6ocaqsmgp8dv1s22f61
   20 Levels: 2l59mm6jc8pae32vilsr99ljp0 40iml67hpjsr8o1oo7f4oin706 ... vvqp3im2g3r90ibv56817asfq7
   [1] 19 16
   [1] 19 16

私は何を間違っていますか?

4

2 に答える 2

1

これはあなたが望むことをしますか?そしてstringsAsFactors=FALSE、あなたのコードでは、文字列に対して要素を照合する可能性があるため、使用しました

topo <- data.frame(a=c('2l59mm6jc8pae32vilsr99ljp0','40iml67hpjsr8o1oo7f4oin706'),
               b=c('3359mm6jc8pae32vilsr99ljp0','411iml67hpjsr8o1oo7f4oin706'), 
               stringsAsFactors=FALSE)

neighbors <- function(topo, usr){ 
    n = c()
    for (i in seq_along(usr)){
      if (topo[i,1] == usr[i])
         n[i] <- topo[i,2]
    }
    return( n )
}

<r> neighbors(topo=topo, usr='2l59mm6jc8pae32vilsr99ljp0')
[1] "3359mm6jc8pae32vilsr99ljp0"

<r> neighbors(topo=topo, usr=c('2l59mm6jc8pae32vilsr99ljp0','40iml67hpjsr8o1oo7f4oin706'))
[1] "3359mm6jc8pae32vilsr99ljp0"  "411iml67hpjsr8o1oo7f4oin706"
于 2013-10-31T17:03:43.367 に答える