我是R的新手,我正在嘗試使用party:ctree
庫的分類決策樹。一切似乎都很好。我得到了預期的結果和一個很好描述的情節。R中的閉包,函數內的函數調用,遞歸函數
現在,如果我想從摘要中提取結果,我會遍歷每個節點並提取信息。幸運的是,這已經寫入@baydoganm here。我想擴展此代碼並將結果寫入dataframe
而不是打印它。
重複性代碼:
library(party)
ct <- ctree(Species ~ ., data = iris)
traverse <- function(treenode){
if(treenode$terminal){
bas=paste(treenode$nodeID,treenode$prediction)
print(bas) #here the results are printed
return(0)
}
traverse(treenode$left)
traverse(treenode$right)
}
traverse([email protected]) #function call
這工作得很好,我得到的控制檯輸出。現在,如果我想將結果寫入數據框,則會遇到問題。
我到目前爲止的嘗試:試圖寫入使用可變閉包()的列表。但不知道如何讓它工作。
l <- list()
count = 0
traverse1 <- function(treenode,l){
if((treenode$terminal == T)){
count <<- count + 1
print(count)
node = c(treenode$nodeID)
pred = c(treenode$prediction)
l[[count]] <- data.frame(node,pred) #write results in the dataframe
}
traverse1(treenode$left,l)
traverse1(treenode$right,l)
}
test <- traverse1([email protected],l)# function call
我只得到我的最後一次通話的功能,其餘均爲無效
感謝。我從來沒有遇到過,設置globalEnv。今天學了點兒新東西。我也喜歡你的骯髒的方式+1它 – user3560220