0

我正在使用包中的Arthritis数据集vcd来执行一种热编码。我想用purrr::dmap_ifMatrix::model.matrix一起来做这件事。当我跑

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

工作正常。

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

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

1 回答 1

1

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

如果您想在应用函数之前仅使用因子变量,请考虑keep. 一旦你只选择了因子变量 using keep,你就可以使用invokeapply 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
...
于 2016-06-22T18:11:49.870 回答