簡體   English   中英

遍歷列表並在R中追加

[英]Loop through list and append in R

我對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的匹配,然后將第二列的內容添加到n ,然后返回。

我會在輸出中得到一些數字: 1916 如果我嘗試對其進行調試,則會得到以下答案:

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

我究竟做錯了什么?

更好的方法是:

n = topo[,2][topo[,1] %in% usr]

沒有看到您的數據集,我不能肯定地說,但是我在您的代碼中看到了兩個潛在的問題:

1) topo欄1和2是因素。 您應該將它們轉換為字符。

2)如果usr有多個元素, if(topo[i,1] == usr)將無法正常工作。

這是您想要的嗎? 我使用stringsAsFactors=FALSE因為在您的代碼中您可能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"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM