+-
很抱歉,今天所有与purrr相关的问题,仍在尝试弄清楚如何有效地使用它。
因此,在SO的一些帮助下,我设法根据来自data.frame的输入值来运行随机森林游侠模型。使用purrr::pmap
完成此操作。但是,我不明白如何从调用的函数生成返回值。考虑这个例子:
library(ranger) data(iris) Input_list <- list(iris1 = iris, iris2 = iris) # let's assume these are different input tables # the data.frame with the values for the function hyper_grid <- expand.grid( Input_table = names(Input_list), mtry = c(1,2), Classification = TRUE, Target = "Species") > hyper_grid Input_table mtry Classification Target 1 iris1 1 TRUE Species 2 iris2 1 TRUE Species 3 iris1 2 TRUE Species 4 iris2 2 TRUE Species # the function to be called for each row of the `hyper_grid`df fit_and_extract_metrics <- function(Target, Input_table, Classification, mtry,...) { RF_train <- ranger( dependent.variable.name = Target, mtry = mtry, data = Input_list[[Input_table]], # referring to the named object in the list classification = Classification) # otherwise regression is performed RF_train$confusion.matrix } # the pmap call using a row of hyper_grid and the function in parallel purrr::pmap(hyper_grid, fit_and_extract_metrics)
应该返回3倍3 * 3的混淆矩阵的4倍,因为
iris$Species
中有3个级别,而是返回了巨大的混淆矩阵。有人可以向我解释发生了什么吗?
第一行:
> purrr::pmap(hyper_grid, fit_and_extract_metrics)
[[1]]
predicted
true 4.4 4.7 4.8 4.9 5 5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 5.9 6 6.1 6.2 6.3 6.4
4.3 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
4.4 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
4.5 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
4.6 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
4.7 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
4.8 0 0 1 3 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
4.9 0 0 1 2 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0
5 0 0 0 1 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0
5.1 0 0 0 0 0 8 0 0 0 1 0 0 0 0 0 0 0 0 0
很抱歉,今天所有与purrr相关的问题,仍在尝试找出如何有效利用它的问题。因此,在SO的一些帮助下,我设法使基于...
0
投票
投票
这里的问题是因为传递给函数的参数是级别,而不是字符。这触发了护林员功能。为了解决这个问题,您需要做的就是在stringsAsFactors = FALSE
中设置expand.grid
: