`dmap_if` 和 'model.matrix' 在一起

`dmap_if` and 'model.matrix' together

我正在使用 vcd 包中的 Arthritis 数据集来执行一次热编码。我想同时使用 purrr::dmap_ifMatrix::model.matrix 来做到这一点。当我运行

do.call(model.matrix, list(Improved~.,Arthritis))

工作正常。

当我使用下面的代码时,它不起作用

Arthritis %>% dmap_if(is.factor, do.call(model.matrix, list(Improved~., .)))

据我所知,dmap_if 一次遍历数据集的各列,因此看起来不一定是完成此任务的正确工具。

如果您只想在应用函数之前使用因子变量,请考虑 keep。使用 keep 选择因子变量后,您可以使用 invoke 应用 model.matrixinvoke 函数只是 do.call 的包装器,可以很好地与管道一起使用。

Arthritis %>% 
    keep(is.factor) %>% 
    invoke(model.matrix, Improved~., data = .)

   (Intercept) TreatmentTreated SexMale
1            1                1       1
2            1                1       1
3            1                1       1
4            1                1       1
5            1                1       1
6            1                1       1
7            1                1       1
8            1                1       1
9            1                1       1
10           1                1       1
11           1                1       1
12           1                1       1
13           1                1       1
14           1                1       1
15           1                1       0
16           1                1       0
...