Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么要把函数放在r的函数参数中?_R_Function_Arguments - Fatal编程技术网

为什么要把函数放在r的函数参数中?

为什么要把函数放在r的函数参数中?,r,function,arguments,R,Function,Arguments,假设我有这个函数 library(dplyr) x<-c(1,2,3,4,5) my_function <- function(){ results <- x %>% sum()%>% sqrt() return(results) } my_function() [1] 3.872983 库(dplyr) x使用函数名传递函数,如下所示: my_function <- function(x, fun1, fun2) {

假设我有这个函数

 library(dplyr)
 x<-c(1,2,3,4,5)
 my_function <- function(){
  results <- x %>%
    sum()%>%
    sqrt()
 return(results)
 }

 my_function()
 [1] 3.872983
库(dplyr)

x使用函数名传递函数,如下所示:

my_function <- function(x, fun1, fun2) {
  x %>%
    fun1 %>%
    fun2
}

my_function(1:5, sum, sqrt)
## [1] 3.872983
my_函数%
fun1%>%
fun2
}
my_函数(1:5,求和,sqrt)
## [1] 3.872983
通常是这样做的,允许传递函数或用字符串命名函数

my_function <- function(x, fun1, fun2) {
  fun1 <- match.fun(fun1)
  fun2 <- match.fun(fun2)
  x %>%
    fun1 %>%
    fun2
}

my_function(1:5, sum, sqrt)
## [1] 3.872983
my_function(1:5, "sum", "sqrt")
## [1] 3.872983

my_函数您可以将其作为承诺传递给函数,然后通过调用参数名对其进行求值。您的第二个函数工作得非常好。问题在哪里?哇!我没想到第二个函数会起作用谢谢大家。我知道这是可行的,你最近(我知道我过去有过)遇到过问题吗?管道需要函数参数(
()
)才能起作用?谢谢你们的工作,还有一个问题,如果x有NA my_函数(c(1:3,NA),sum(NA.rm=t),会发生什么,sqrt)此代码无效。您必须传递函数,而不是表达式。定义
sum\u na
my_function <- function(x, fun1, fun2) {
  fun1 <- match.fun(fun1)
  fun2 <- match.fun(fun2)
  x %>%
    fun1 %>%
    fun2
}

my_function(1:5, sum, sqrt)
## [1] 3.872983
my_function(1:5, "sum", "sqrt")
## [1] 3.872983