我有一个数据框。为了论证,让我们说它是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))
答案 0 :(得分:2)
我认为您发生尺寸错误。
如果我这样做
library(dplyr)
transmute(head(women, n=10),
some_index=calc_some_index(head(women,10)))
然后它可以工作(代码中的错误主张大小不同)
或者,您可以使用管道并且它可以工作:
head(women, 10) %>%
transmute(calc_some_index(.))