[英]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
,然后返回。
我會在輸出中得到一些數字: 19
和16
。 如果我嘗試對其進行調試,則會得到以下答案:
[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.