Mas*_*awa 5 functional-programming r
在Harold Abelson的"计算机程序的结构和解释"中,使用Lisp编程语言,其中一个练习要求您评估以下代码:
(define (a-plus-abs-b a b)
((if (> b 0) + -) a b))
Run Code Online (Sandbox Code Playgroud)
当然,一种方法R是:
APlusAbsB <- function(a, b){
if(b > 0) a + b else a - b
}
Run Code Online (Sandbox Code Playgroud)
然后我重复as和bs.
我的问题是:是否R允许运算符为复合表达式(例如if (> b 0) + -))?例如,有没有办法做类似的事情
APlusAbsB <- function(a, b){ ## this doesn't work
if(b > 0) "+" else "-" (a, b) ## gives "+" or "-"
}
Run Code Online (Sandbox Code Playgroud)
尝试
APlusAbsB <- function(a, b){
(if(b > 0) `+` else `-`)(a, b)
}
Run Code Online (Sandbox Code Playgroud)
这里if将返回一个函数,然后用括号语法调用它.例如
APlusAbsB(1,5)
# [1] 6
APlusAbsB(1,-1)
# [1] 2
Run Code Online (Sandbox Code Playgroud)