我有一个数据框。为了论证起见,假设它是datasets::women
数据框。我想通过对每一行应用一个函数来从帧创建一个向量。
似乎通常的方法是使用 dplyr
并调用 mutate
或 transmute
,例如:
dplyr::transmute(women, some_index = 2 * height + weight)
太好了:那行得通。但是,如果我将some_index
的计算提取到一个作用于行的函数中呢:
calc_some_index <- function(woman) {
2 * woman$height + woman$weight
}
有没有办法调用mutate
/transmute
,以便它在其输入的每一行上调用此函数?
当然,如果我打电话,我可以看到我得到了正确的结果
dplyr::transmute(women, some_index=calc_some_index(women))
但我相信这只是通过将预先计算的计算向量代入transmute
调用来"作弊"。例如,如果我调用:
dplyr::transmute(head(women, n=10), some_index=calc_some_index(women))
我认为您正在招致尺寸错误。
如果我这样做
library(dplyr)
transmute(head(women, n=10),
some_index=calc_some_index(head(women,10)))
然后它工作(代码中的错误抱怨大小不同)
或者,您可以使用管道,它可以工作:
head(women, 10) %>%
transmute(calc_some_index(.))