【发布时间】:2018-03-22 12:35:41
【问题描述】:
假设我想对 tibble 中的所有列求和,以创建一个名为“total”的新列。我可以这样做:
library(tibble)
library(dplyr)
set.seed(42)
N <- 10
Df <- tibble(p_1 = rnorm(N),
p_2 = rnorm(N),
q_1 = rnorm(N),
q_2 = rnorm(N))
# Works fine
Df %>% mutate(total = apply(., 1, sum))
我可以像这样创建一个辅助函数,
myfun <- function(Df){
apply(Df, 1, sum)
}
# Works fine
Df %>% mutate(total = myfun(.))
但是假设这个myfun 通常会以这种方式使用,即在dplyr 动词函数中,然后是“。”引用数据框是多余的,如果myfun 函数可以将其替换为默认值,那就太好了。我想要这样的东西:
myfun2 <- function(Df=.){
apply(Df, 1, sum)
}
这不起作用。
Df %>% mutate(total = myfun2())
Error in mutate_impl(.data, dots) :
Evaluation error: object '.' not found.
因为我什至不确定“。”工作,我不认为我可以更好地提出问题,但基本上,我想知道是否有一种说法,实际上,如果Df 未在myfun2 中定义,则获取数据框通常由“.”引用?
【问题讨论】: