2017-02-28 108 views
0

我很好奇在caret封裝機器學習算法的生態系統,但很快就發現自己補防列表轉換成數據幀的問題。從插入符拉列表數據到數據幀

我期待構建一個由caret方法名稱,其標籤,關聯庫,其類型(分類,迴歸)和標籤組成的數據集。

我的第一步就是要做到:

library(caret) 
carets <- getModelInfo() 

這使得所有的caret車型檔案到一個單一的巨大命名列表。我可以通過這樣做得到列表的子元素:

attach(carets) 
ada$label 
ada$library 
ada$type 
ada$tags 

有沒有一種方法從整個列表中提取信息?我試過了:

library(data.table) 
carets.df <- data.frame(unlist(carets)) 
carets.df2 <- rbindlist(carets, fill=TRUE) 
carets.df3 <- do.call(rbind, Map(data.frame, carets) 
carets.df4 <- lapply(carets, function(x) do.call(rbind, x)) 

無濟於事。我覺得我很接近,但我不是超級熟悉的列表和編程提取命名的元素...

+0

如果我正確理解你的問題,好像你正試圖堅持非表格數據成'data.frame',其中包含表格數據。 – steveb

+0

什麼是轉換到數據幀的利益?該'library'和'tags'變量將是矢量,所以你必須要麼將它們存儲爲分隔文本或它們分割跨行,造成了大量的重複。可能會更好地弄清楚如何處理清單。 – neilfws

+0

確實沒有任何好處,但它只是制定了從可讀性的角度更好地爲我所期待的。我的答案有詳細信息。 – AI52487963

回答

0

答案真的從我如何找到特定列表中的元素的作品源於無知,但在這種情況下,哈克的方式下面有什麼我是後:

carets <- getModelInfo() 

carets.names <- names(carets) 

carets.library <- 0 
carets.label <- 0 
carets.type <- 0 
carets.tags <- 0 

for(i in 1:length(carets.names)){ 
    carets.library <- c(carets.library, toString(carets[[i]][["library"]])) 
    carets.label <- c(carets.label, carets[[i]][["label"]]) 
    carets.type <- c(carets.type, toString(carets[[i]][["type"]])) 
    carets.tags <- c(carets.tags, toString(carets[[i]][["tags"]])) 
} 

carets.df <- data.frame(carets.names, carets.library[2:228], carets.label[2:228], carets.type[2:228], carets.tags[2:228])