r - 将数据帧的行作为参数传递给函数,同时保持其他参数不变

标签 r

跟进Pass rows of a data frame as arguments to a function in R with column names specifying the arguments :

我想使用不同的参数组合来训练以下模型:

library(xgboost)
library(Matrix)

df <- data.frame(y = sample(0:1, 1000, replace = TRUE),
                 a = rnorm(1000),
                 b = rnorm(1000),
                 c = rnorm(1000),
                 d = rnorm(1000))

train <- sparse.model.matrix(object = y~.-1, data = df)

model <- xgboost(data = train,
                 label = df$y,
                 # parameters
                 nrounds = 10, 
                 subsample = 0.5,
                 colsample_bytree = 0.8)

我使用参数创建了一个网格,我想将网格的行传递到 xgboost 函数中,同时保留 datalabel 参数不变。

param <- expand.grid(nrounds = c(10, 50, 100),
                     subsample = c(0.5, 0.8, 0.9),
                     colsample_bytree = c(0.8))

我想使用列名来传递参数来指定它们(如果列名不是一个选项,列的顺序也将执行此操作),因为这将使调用可针对不同的函数进行扩展。

最佳答案

我遇到了类似的问题,一直徒劳地寻找,直到我在 Hadley 的 Advanced R 中找到它。这允许您传递出现在数据框中的参数,将列的名称作为参数。阅读此处:

https://adv-r.hadley.nz/functionals.html#pmap

所以,就在这里。通过 purrr::pmap 有一个解决方案。它将参数映射到函数上:

from Hadley's Advanced R, 8.4.5

这是我自己的代码,我最近与 quanteda 一起使用来处理 Kaggle SMS Spam 数据集。这些是我的参数的可能性:

tolower <- data_frame(tolower = c(TRUE, FALSE))
stem <- data_frame(stem = c(TRUE, FALSE))
remove_punct <- data_frame(remove_punct = c(TRUE, FALSE))

这是一个额外的好处,但不是必需的,但我发现我需要所有参数的组合来运行朴素贝叶斯模型。感谢 Y J 通过此 SO post :

expand.grid.df <- function(...) Reduce(function(...) merge(..., by=NULL), list(...))
parameters <- expand.grid.df(tolower, stem, remove_punct)

所以,现在我的参数如下所示:

> parameters
  tolower  stem remove_punct
1    TRUE  TRUE         TRUE
2   FALSE  TRUE         TRUE
3    TRUE FALSE         TRUE
4   FALSE FALSE         TRUE
5    TRUE  TRUE        FALSE
6   FALSE  TRUE        FALSE
7    TRUE FALSE        FALSE
8   FALSE FALSE        FALSE

现在神奇的是,通过 pmap 将参数传递给我选择的函数 (dfm):

mymodels <- pmap(parameters, dfm, x = mycorpus)

(x = mycorpus 是一个常量的额外参数,我想将其传递给 dfm)

这是我得到的:

> length(mymodels)
[1] 8
> mymodels[[1]]
Document-feature matrix of: 5,572 documents, 7,714 features (99.8% sparse).

希望这对您或其他研究此方法的人有帮助!

关于r - 将数据帧的行作为参数传递给函数,同时保持其他参数不变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42112654/

相关文章:

r - 从 R 中的字符串中提取日期时间

r - 在 R : Avoid duplicates in selection from many rows 中

r - DT Shiny R - [input$tableId_rows_all, ] 不工作

r - 使用循环或应用覆盖多个字符串变量

r - 结合 mutate 和 filter 函数

r - 根据 R 中另一列的条件求和(或不求和)一个值

r - 将蓝色以外的颜色应用于 bin2d

r - 识别只有 0 个值的列

r - 使用 docker 文件安装 R 包

r - 在 R 中使用多个变量对数据进行子集化