[英]How to fill a list with a recursive function in R?
我正在使用HAC(Hierarchical Agglomerative Clustering)。 我有一個樹狀圖,我正在嘗試將元素保存到文件中,以進行后驗分析(通過聚類為元素分配代碼)。
我有一個遞歸函數,它接受樹形圖的一個分支並返回一個元素列表。
我的問題如下,當函數返回列表時,它只包含我的分支的一個元素,盡管每個元素都正確附加。 這是我的代碼:
lista_interna<-function(lista,elementos){
print(paste("Tam El. ",length(elementos),""))
for (i in 1:length(lista)){
if(typeof(lista[[i]])=="integer"){
print("agrega agrega...")
elementos[[length(elementos)+1L]]<-lista[[i]]
}else if(typeof(lista[[i]])=="list"){
print("Hace Recall....")
Recall(lista[[i]],elementos);
}
}
print(elementos) # when I print here the list, contains all elements
return (elementos)
}
哪里:
如果調用該函數,結果是一個包含一個元素的列表(第一個葉子):
empty<-list()
res<-lista_interna(dendrogram_branch,empty)
任何建議都將受到歡迎。
最好的祝福,
弗拉基米爾。
您的函數假定R正在使用錯誤引用的call-by-reference語義。 將列表傳遞給函數並進行修改時,原始列表不會更改。
您需要做的是使用Recall的返回值並連接結果,如下例所示:
f = function (x) {
if (x <=0 ) {
return( c() )
} else {
return( c(Recall(x-1),x) )
}
}
# f(5)
# [1] 1 2 3 4 5
評論:請發布一個可重復的例子。
快速回答:使用:
elementos <- Recall(lista[[i]],elementos)
你試過這個嗎?
unlist(lista)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.