我正在尝试在 R 中进行匿名递归,并使用管道来学习。下面的代码运行良好
sorttt <- function(list){
if (length(list) == 0) c() else c(max(list), Recall(list[list < max(list)]))
}
example %>% sorttt
Run Code Online (Sandbox Code Playgroud)
但这段代码出错了,并出现以下错误:Error in example %>% function(list) { : invalid formal argument list for "function"
example %>% function(list){if (length(list) == 0) c() else c(max(list), Recall(list[list < max(list)]))}
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么这两者可能表现不同?这些在逻辑上似乎是同一件事。
您需要将匿名函数括在括号中,以便它们可以与管道一起使用。
## doesn't work
1:10 %>% function(x) {mean(x)}
# Error in 1:10 %>% function(x) { :
# invalid formal argument list for "function"
## works with parens
1:10 %>% (function(x) {mean(x)})
# [1] 5.5
Run Code Online (Sandbox Code Playgroud)
你的功能也是如此:
1:3 %>%
(function(list){if (length(list) == 0) c() else c(max(list), Recall(list[list < max(list)]))})
# [1] 3 2 1
Run Code Online (Sandbox Code Playgroud)
这是因为function它本身就是一个函数。A %>% function(x){...}被解释为function(A, x){...}. 括号确保在管道插入参数之前运行整个函数定义。
| 归档时间: |
|
| 查看次数: |
108 次 |
| 最近记录: |