R中比较运算符的函数

R中比较运算符的函数,r,function,comparison,operator-keyword,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)) } 这只是一个玩具示例,但我想知道

我想定义一个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))
}

这只是一个玩具示例,但我想知道哪个函数实现了四个=运算符。

不确定为什么需要它,但可以这样做:

fun <- function(x,y, op){
   return(eval(parse(text=paste(x,op,y))))
}

fun(4,3,">=") # example, returns TRUE

显然,如果您想要更复杂的函数调用,您需要在函数中添加条件,但是对于两个变量的比较运算符,这应该是最快的[如果您真的必须这样做]

不确定为什么要这样做,但您可以这样做:

fun <- function(x,y, op){
   return(eval(parse(text=paste(x,op,y))))
}

fun(4,3,">=") # example, returns TRUE
显然,如果需要更复杂的函数调用,则需要在函数中添加条件,但对于2个变量的比较运算符,这应该是最快的[如果确实需要这样做]

您可以使用get,并记住逻辑运算符实际上是函数:

fun <- function(x,y, op){
  get(op)(x,y)
}

fun(4,3,">=")
#[1] TRUE
fun(4,3,"<")
#[1] FALSE
您可以使用get并记住,逻辑运算符实际上是函数:

fun <- function(x,y, op){
  get(op)(x,y)
}

fun(4,3,">=")
#[1] TRUE
fun(4,3,"<")
#[1] FALSE

操作符已经是函数了,所以不需要额外的层

x <- 1:5
y <- 5:1
`<`(x, y)
## [1]  TRUE  TRUE FALSE FALSE FALSE
"<"(x, y)
## [1]  TRUE  TRUE FALSE FALSE FALSE
不过,请注意,直接使用op变量是行不通的

op(x, y)
## Error: could not find function "op"

操作符已经是函数了,所以不需要额外的层

x <- 1:5
y <- 5:1
`<`(x, y)
## [1]  TRUE  TRUE FALSE FALSE FALSE
"<"(x, y)
## [1]  TRUE  TRUE FALSE FALSE FALSE
不过,请注意,直接使用op变量是行不通的

op(x, y)
## Error: could not find function "op"

为什么不在fun之外定义四个函数,然后根据if条件调用其中一个呢?这不是很优雅,会导致大量代码重复…为什么不在fun之外定义四个函数,然后根据if条件调用其中一个呢?这不是很优雅,这会导致大量代码重复……就我个人而言,我从未后悔试图不低估自己未来的愚蠢格雷格·斯诺解释为什么要逃避。。。通常是次优的,回答一个由臭名昭著的财富106 R-help引发的问题2007年1月它有了自己的位置。虽然也不确定这是不是那个地方;就我个人而言,我从不后悔试图不低估自己未来的愚蠢格雷格·斯诺解释为什么要逃避。。。通常是次优的,回答一个由臭名昭著的财富106 R-help引发的问题2007年1月它有了自己的位置。虽然也不确定这是不是那个地方;我认为match.fun可能比get@James嗯,它增加了一些支票。来自helpmatch.fun:如果fun是一个函数,则返回它。例如,如果它是一个包含在反引号中的符号或长度为1的字符向量,则将使用get在调用方的父级环境中查找它get@James嗯,它增加了一些支票。来自helpmatch.fun:如果fun是一个函数,则返回它。例如,如果它是一个包含在反引号中的符号或长度为1的字符向量,则将在调用方的父级环境中使用get进行查找。我也不是,这正是我想要的:@Roland、@LucaCerone您也可以使用If和for等进行查找。尝试'if'TRUE,message我们正在使用if作为函数!或“为”我,1:5,printi@RichieCotton我知道你可以用反勾来做。我只是不知道用引号也可以。实际上它不起作用。。如果我玩得开心=我也不开心,那正是我想要的:@Roland,@LucaCerone你也可以用if和for等来做。尝试'if'TRUE,message我们正在使用if作为函数!或“为”我,1:5,printi@RichieCotton我知道你可以用反勾来做。我只是不知道用引号也可以。实际上它不起作用。。如果我玩得开心=