我想定义一个R函数,我可以在其中选择比较运算符,如
fun <- function(x,y, op){
if (op = "<"){
comp_fun = <function for less than>
} else if (op = "<="){
comp_fun = <function for less equal than>
}
return(comp_fun(x,y))
}
这只是一个玩具示例,但我想知道哪个函数实现了四个“&lt;”,“&lt; =”,“&gt;”和“&gt; =”运营商。
答案 0 :(得分:2)
您可以使用get
并记住逻辑运算符实际上是函数:
fun <- function(x,y, op){
get(op)(x,y)
}
fun(4,3,">=")
#[1] TRUE
fun(4,3,"<")
#[1] FALSE
修改强>
您还可以使用专为此设计的match.fun
并添加一些检查。
fun <- function(x,y, op){
match.fun(op)(x,y)
}
答案 1 :(得分:1)
不确定为什么要这样,但你可以这样做:
fun <- function(x,y, op){
return(eval(parse(text=paste(x,op,y))))
}
fun(4,3,">=") # example, returns TRUE
显然,如果你想要更复杂的函数调用,你需要在函数中添加条件,但是对于2个变量的比较运算符,这应该是最快的[如果你真的必须这样做的话]
答案 2 :(得分:1)
操作符已经是函数,因此您不需要额外的图层。
x <- 1:5
y <- 5:1
`<`(x, y)
## [1] TRUE TRUE FALSE FALSE FALSE
"<"(x, y)
## [1] TRUE TRUE FALSE FALSE FALSE
尽管James和Roland提到过,但您可以使用get
或match.fun
。
op <- "<"
get(op)(x, y)
## [1] TRUE TRUE FALSE FALSE FALSE
match.fun(op)(x, y)
## [1] TRUE TRUE FALSE FALSE FALSE
虽然被警告直接使用op
变量不起作用
op(x, y)
## Error: could not find function "op"