Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.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_Pipeline - Fatal编程技术网

带匿名函数的R流水线

带匿名函数的R流水线,r,pipeline,R,Pipeline,我有一个问题,这是一个问题的延伸 我希望能够管道匿名函数。在上一个问题中,管道定义函数的答案是创建管道运算符“%|>%”,并按以下方式定义: "%|>%" <- function(fun1, fun2){ function(x){fun2(fun1(x))} } 我希望能够使用以下匿名函数定义pipelineTest函数: square <- function(x){x^2} add5 <- function(x){x + 5} pipel

我有一个问题,这是一个问题的延伸

我希望能够管道匿名函数。在上一个问题中,管道定义函数的答案是创建管道运算符“%|>%”,并按以下方式定义:

"%|>%" <- function(fun1, fun2){
              function(x){fun2(fun1(x))}
}
我希望能够使用以下匿名函数定义
pipelineTest
函数:

square <- function(x){x^2}
add5 <- function(x){x + 5}

pipelineTest <-
  square %|>%
  add5
anonymousPipelineTest <-
  function(x){x^2} %|>%
  function(x){x+5} %|>%
  x
anonymousPipe <- Compose(
  function(x){x^2},
  function(x){x+5})
> anonymousPipe(1:10)
 [1]   6   9  14  21  30  41  54  69  86 105
anonymousPipeData <- Compose(
  seq(1:10),
  function(x){x^2},
  function(x){x+5})()
anonymousPipelineTest%
函数(x){x+5}%|>%
x
当我尝试使用与上面相同的参数调用此函数时,我得到以下结果:

> anonymousPipelineTest(1:10)
function(x){fun2(fun1(x))}
<environment: 0x000000000ba1c468>
匿名管道测试(1:10) 函数(x){fun2(fun1(x))}
我希望得到与管道测试(1:10)相同的结果。我知道这是一个微不足道的例子。我真正想了解的是一种管道匿名函数的方法。谢谢你的帮助

这是
?funprog
帮助页面上提供的示例的应用程序:

Funcall <- function(f, ...) f(...)
anonymousPipelineTest <- function(x) Reduce( Funcall, list(
    function(x){x+5}, function(x){x^2}), 
    x, right=TRUE)
 anonymousPipelineTest(1:10)
 #[1]   6   9  14  21  30  41  54  69  86 105

Funcall这是
?funprog
帮助页面上提供的示例的应用程序:

Funcall <- function(f, ...) f(...)
anonymousPipelineTest <- function(x) Reduce( Funcall, list(
    function(x){x+5}, function(x){x^2}), 
    x, right=TRUE)
 anonymousPipelineTest(1:10)
 #[1]   6   9  14  21  30  41  54  69  86 105

Funcall使用Compose,调用生成的函数可以得到以下结果:

"%|>%" <- function(...) Compose(...)()
“%|>%%%函数(x){x}
匿名管道测试(1:10)
[1]   6   9  14  21  30  41  54  69  86 105

使用Compose并调用生成的函数可以得到以下结果:

"%|>%" <- function(...) Compose(...)()
“%|>%%%函数(x){x}
匿名管道测试(1:10)
[1]   6   9  14  21  30  41  54  69  86 105

我正在给出一个答案,这是我发现的最接近于其他寻找相同答案的人的答案。不过我不会给自己打分,因为这不是我想要的

返回函数: 如果你想把几个函数放在一起,我发现最简单的方法就是使用R的“Functional”包中的“Compose”函数。它看起来像这样:

square <- function(x){x^2}
add5 <- function(x){x + 5}

pipelineTest <-
  square %|>%
  add5
anonymousPipelineTest <-
  function(x){x^2} %|>%
  function(x){x+5} %|>%
  x
anonymousPipe <- Compose(
  function(x){x^2},
  function(x){x+5})
> anonymousPipe(1:10)
 [1]   6   9  14  21  30  41  54  69  86 105
anonymousPipeData <- Compose(
  seq(1:10),
  function(x){x^2},
  function(x){x+5})()
返回数据: 如果您只想从一些数据开始并通过一系列转换发送它(我的初衷),那么“Compose”函数中的第一个函数应该是您的起始数据,在“Compose”函数结束后,添加一个括号对来调用该函数。看起来是这样的:

square <- function(x){x^2}
add5 <- function(x){x + 5}

pipelineTest <-
  square %|>%
  add5
anonymousPipelineTest <-
  function(x){x^2} %|>%
  function(x){x+5} %|>%
  x
anonymousPipe <- Compose(
  function(x){x^2},
  function(x){x+5})
> anonymousPipe(1:10)
 [1]   6   9  14  21  30  41  54  69  86 105
anonymousPipeData <- Compose(
  seq(1:10),
  function(x){x^2},
  function(x){x+5})()

anonymousPipeData我给出了一个答案,这是我发现的最接近于其他寻找相同答案的人的答案。不过我不会给自己打分,因为这不是我想要的

返回函数: 如果你想把几个函数放在一起,我发现最简单的方法就是使用R的“Functional”包中的“Compose”函数。它看起来像这样:

square <- function(x){x^2}
add5 <- function(x){x + 5}

pipelineTest <-
  square %|>%
  add5
anonymousPipelineTest <-
  function(x){x^2} %|>%
  function(x){x+5} %|>%
  x
anonymousPipe <- Compose(
  function(x){x^2},
  function(x){x+5})
> anonymousPipe(1:10)
 [1]   6   9  14  21  30  41  54  69  86 105
anonymousPipeData <- Compose(
  seq(1:10),
  function(x){x^2},
  function(x){x+5})()
返回数据: 如果您只想从一些数据开始并通过一系列转换发送它(我的初衷),那么“Compose”函数中的第一个函数应该是您的起始数据,在“Compose”函数结束后,添加一个括号对来调用该函数。看起来是这样的:

square <- function(x){x^2}
add5 <- function(x){x + 5}

pipelineTest <-
  square %|>%
  add5
anonymousPipelineTest <-
  function(x){x^2} %|>%
  function(x){x+5} %|>%
  x
anonymousPipe <- Compose(
  function(x){x^2},
  function(x){x+5})
> anonymousPipe(1:10)
 [1]   6   9  14  21  30  41  54  69  86 105
anonymousPipeData <- Compose(
  seq(1:10),
  function(x){x^2},
  function(x){x+5})()

anonymousPipeData最后一个问题是一个有趣的练习,但实际上这不是做事的“R方式”。你不想用上一个问题中的方式做事有什么原因吗?我知道这不是“R方式”,如果这给人们带来了挫折,我很抱歉。我来自F#,它广泛使用管道操作符“|>”,对一组数据执行一系列函数。我发现这非常有用,而且在语法上非常清晰。再一次,我很抱歉,如果我问如何“把一个圆钉在一个方孔”。第一个问题来自于对R的无知,现在我在寻找R灵活性的极限。感谢所有帮助解决这个问题的人!最后一个问题是一个有趣的练习,但实际上这不是做事的“R方式”。你不想用上一个问题中的方式做事有什么原因吗?我知道这不是“R方式”,如果这给人们带来了挫折,我很抱歉。我来自F#,它广泛使用管道操作符“|>”,对一组数据执行一系列函数。我发现这非常有用,而且在语法上非常清晰。再一次,我很抱歉,如果我问如何“把一个圆钉在一个方孔”。第一个问题来自于对R的无知,现在我在寻找R灵活性的极限。感谢所有帮助解决这个问题的人!当然可以,但是你也可以很容易地使用
编写
对吗<代码>anonyPipeTest我(现在)看到Wallhood忽略了@mnel的答案,这基本上是我独立构建的。这个结果不同于OP。这个答案是以与OP相反的顺序应用函数(他平方,然后加5)。当然,但你也可以很容易地使用
组合
,不是吗<代码>anonyPipeTest我(现在)看到Wallhood忽略了@mnel的答案,这基本上是我独立构建的。这个结果不同于OP。这个答案是以与OP相反的顺序应用函数(他平方,然后加5)。太棒了!!非常感谢。很有魅力。太棒了!!非常感谢。工作起来很有魅力。