2017-02-28 79 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])