4

我正在使用 HAC(分层凝聚聚类)。我有一个树状图,我正在尝试将元素保存到文件中,以进行后验分析(通过集群为元素分配代码)。

我有一个递归函数,它采用树状图的一个分支并返回一个元素列表。

我的问题如下,当函数返回列表时,它只包含我分支的一个元素,尽管它正确地附加了每个元素。这是我的代码:

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)
}

在哪里:

  • lista:是树状图分支
  • elementos:是结果列表(包含所提供分支的所有元素)

如果调用该函数,则结果是一个包含一个元素(第一个叶子)的列表:

empty<-list()
res<-lista_interna(dendrogram_branch,empty)

任何建议都将受到欢迎。

此致,

弗拉基米尔。

4

2 回答 2

1

评论:请发布一个可重现的示例。

快速回答:使用:

elementos <- Recall(lista[[i]],elementos)

你试过这个吗?

unlist(lista)
于 2013-09-04T08:47:39.257 回答
0

您的函数假定 R 使用的是错误的按引用调用语义。当您将列表传递给函数并对其进行修改时,原始列表不会被更改。

您需要做的是使用 Recall 的返回值并将结果连接起来,如下例所示:

f = function (x) { 
       if (x <=0 ) {
          return( c() )
       } else {
         return( c(Recall(x-1),x) )
       }
    }

# f(5)
# [1] 1 2 3 4 5         
于 2013-09-04T08:47:27.650 回答