使用存储在 list-cols 中的函数和参数 - Purrr [英] Use functions and parameters stored in list-cols - Purrr

查看:59
本文介绍了使用存储在 list-cols 中的函数和参数 - Purrr的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下信息:

# A tibble: 18 × 6
      id                     columnFilter  modelName  model               train.X        train.Y
   <int>                            <chr>      <chr> <list>                <list>         <list>
1      1              groupedColumns.donr boostModel  <fun> <tibble [3,984 × 17]> <fctr [3,984]>
2      2       groupedSquaredColumns.donr boostModel  <fun> <tibble [3,984 × 28]> <fctr [3,984]>
3      3   groupedTransformedColumns.donr boostModel  <fun> <tibble [3,984 × 17]> <fctr [3,984]>
4      4            ungroupedColumns.donr boostModel  <fun> <tibble [3,984 × 17]> <fctr [3,984]>
5      5     ungroupedSquaredColumns.donr boostModel  <fun> <tibble [3,984 × 28]> <fctr [3,984]>
6      6 ungroupedTransformedColumns.donr boostModel  <fun> <tibble [3,984 × 17]> <fctr [3,984]>
7      7              groupedColumns.donr   ldaModel  <fun> <tibble [3,984 × 17]> <fctr [3,984]>
8      8       groupedSquaredColumns.donr   ldaModel  <fun> <tibble [3,984 × 28]> <fctr [3,984]>
9      9   groupedTransformedColumns.donr   ldaModel  <fun> <tibble [3,984 × 17]> <fctr [3,984]>
10    10            ungroupedColumns.donr   ldaModel  <fun> <tibble [3,984 × 17]> <fctr [3,984]>
11    11     ungroupedSquaredColumns.donr   ldaModel  <fun> <tibble [3,984 × 28]> <fctr [3,984]>
12    12 ungroupedTransformedColumns.donr   ldaModel  <fun> <tibble [3,984 × 17]> <fctr [3,984]>
13    13              groupedColumns.donr logitModel  <fun> <tibble [3,984 × 17]> <fctr [3,984]>
14    14       groupedSquaredColumns.donr logitModel  <fun> <tibble [3,984 × 28]> <fctr [3,984]>
15    15   groupedTransformedColumns.donr logitModel  <fun> <tibble [3,984 × 17]> <fctr [3,984]>
16    16            ungroupedColumns.donr logitModel  <fun> <tibble [3,984 × 17]> <fctr [3,984]>
17    17     ungroupedSquaredColumns.donr logitModel  <fun> <tibble [3,984 × 28]> <fctr [3,984]>
18    18 ungroupedTransformedColumns.donr logitModel  <fun> <tibble [3,984 × 17]> <fctr [3,984]>

如您所见,modelName 是模型的名称,作为函数存储在 model 中.

As you can see, modelName is the name of the model, stored as a function in model.

我想要做的是对于每一行,调用存储在model中的函数,传递给train.Xtrain.Y作为参数,并将函数的输出存储到一个新列中.

What I want to do is for each row, call the function stored in model, pass it train.X and train.Y as parameters, and store the function's output into a new column.

概念上,类似于:

df %>% mutate(result = pmap(train.X,train.Y,model)

我一直在尝试使用 pmap(),但没有成功.

I've been trying to use pmap(), but to no success.

需要一些指导.

推荐答案

invoke_map 在你结合 train.Xtrain.Y 后应该可以工作> 进入列表.这是可以测试的类似情况下的基本示例.tib 模仿您的情况,因为 xy 是您提供函数所需的参数.在这个例子中,我使用了 runif 函数,它接受参数加上 n.我使用 map2xy 包装在名为params"的列表列中.然后我使用 invoke_map() 函数来迭代地将函数应用于参数.

invoke_map should work after you combine train.X and train.Y into a list. Here's a basic example in a similar situation that could be tested. tib mimics your situation in that x and y are parameters you need to provide the function. In the example, I use the runif function which takes the parameters plus n. I use map2 to get x and y wrapped in a list column called "params". Then I use the invoke_map() function to iteratively apply functions to the params.


library(tidyverse)

# Basic example
tib <- tribble(
    ~fun, ~x, ~y,
    runif, -1, 1,
    runif, -10, 10,
    runif, -3,3
)
tib
#> # A tibble: 3 × 3
#>      fun     x     y
#>   <list> <dbl> <dbl>
#> 1  <fun>    -1     1
#> 2  <fun>   -10    10
#> 3  <fun>    -3     3

tib %>%
    mutate(params = map2(x, y, list)) %>%
    mutate(result = invoke_map(fun, params, n = 5))
#> # A tibble: 3 × 5
#>      fun     x     y     params    result
#>   <list> <dbl> <dbl>     <list>    <list>
#> 1  <fun>    -1     1 <list [2]> <dbl [5]>
#> 2  <fun>   -10    10 <list [2]> <dbl [5]>
#> 3  <fun>    -3     3 <list [2]> <dbl [5]>

现在我们只需要将相同的过程应用到您的示例中.这应该有效.

Now we just need to apply the same procedure to your example. This should work.

df %>%
    mutate(params = map2(train.X, train.Y, list)) %>%
    mutate(result = invoke_map(model, params))

这篇关于使用存储在 list-cols 中的函数和参数 - Purrr的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆