Как я могу объединить оператора прямого канала с анонимной функцией - PullRequest
1 голос
/ 03 октября 2019

Можно ли объединить оператора прямого канала с анонимной функцией? Если так, то как я могу это сделать?

Я понял, что основная идея состоит в последовательной передаче аргументов для выполнения функций. Как показано ниже, сначала анонимная функция вычисляет сумму, а затем передает еек факториальной функции.

Как я могу сделать то же самое
Это то, что я пытаюсь выполнить, используя оператор прямого канала -

calculate <- function(func,d)
 {
   func(d)
   }

factorial(calculate(function(x){x+1},7)) # function x is the anonymous function

Мой код с использованием прямого -оператор канала -

7 %>% calculate(function(x){x+1}) %>% fact()

ожидаемый результат 40320, но это приводит к

Ошибка в функции (d): не удалось найти функцию "функция"

Ответы [ 2 ]

2 голосов
/ 03 октября 2019

Когда вы используете %>% аргумент (в вашем случае 7) подключается как первый аргумент предыдущей функции. Таким образом, 7 %>% calculate(function(x){x+1}) фактически оценивается как calculate(7, function(x){x+1}).

. Вы можете исправить это с помощью

7 %>% calculate(function(x){x+1}, .) %>% factorial()

или с именованными аргументами, поскольку тогда 7 соответствует оставшемуся аргументу.

2 голосов
/ 03 октября 2019

Другой вариант - вызвать аргументы calculate явно, используя имя

7 %>% calculate(func=function(x){x+1}) %>% factorial()
...