我正在使用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~., .)))
答案 0 :(得分:1)
据我所知,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
...