R中比较运算符的函数

时间:2013-11-22 10:21:41

标签: r function comparison operator-keyword

我想定义一个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; =”运营商。

3 个答案:

答案 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提到过,但您可以使用getmatch.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"