将插入符号中的列表数据拉入数据框中

Pulling list data from caret into a data frame

我对 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))

无济于事。我觉得我很接近,但我不是很熟悉列表和以编程方式提取命名元素...

答案确实源于我对查找特定列表元素的工作原理的无知,但在这种情况下,下面的 hacky 方法得到了我想要的:

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