`dmap_if` 和 'model.matrix' 在一起
`dmap_if` and 'model.matrix' together
我正在使用 vcd
包中的 Arthritis
数据集来执行一次热编码。我想同时使用 purrr::dmap_if
和 Matrix::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.matrix
。 invoke
函数只是 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
...
我正在使用 vcd
包中的 Arthritis
数据集来执行一次热编码。我想同时使用 purrr::dmap_if
和 Matrix::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.matrix
。 invoke
函数只是 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
...