我正在使用包中的Arthritis
数据集vcd
来执行一种热编码。我想用purrr::dmap_if
和Matrix::model.matrix
一起来做这件事。当我跑
do.call(model.matrix, list(Improved~.,Arthritis))
工作正常。
当我使用下面的代码不起作用
Arthritis %>% dmap_if(is.factor, do.call(model.matrix, list(Improved~., .)))
我正在使用包中的Arthritis
数据集vcd
来执行一种热编码。我想用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
. 一旦你只选择了因子变量 using keep
,你就可以使用invoke
apply 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
...