R调用具有2个以上参数的中缀函数

时间:2018-03-09 14:15:22

标签: r infix-notation

我非常喜欢xts的{​​{1}}索引搜索,我为data.frame创建了一个。

"%d%"=function(df1,dt,col='dt_pregao') {
  if(regexpr('/',dt)>0){
    dt=strsplit(dt,'/')[[1]]
    return(df1[df1[,col] %>=<% c(dt[1],dt[2]),])}
  return(df1[df1[,col]==dt,])}  

这有效:

opx%d%'2018-03-09'

我看到我可以将列名作为参数 但是如何使用中缀表示法传递第三个参数?这些都不起作用:

opx%d%c('2018-03-09','dt_pregao')
(opx%d%'2018-03-09')'dt_pregao'

P.S。

"%>=<%"<-function(x,rng) x>=rng[1] & x<=rng[2]

opx示例:

structure(list(dt_pregao = structure(c(17487, 17487, 17487, 17487, 
17599, 17599, 17599, 17599, 17599, 17599), class = "Date"), cd_papel = c("PETRK16", 
"PETRK81", "PETRK18", "PETRK4", "PETRK47", "PETRK48", "PETRK53", 
"PETRK7", "PETRK70", "PETRK1"), veFech = c(0.08, 0, 0.01, 0.01, 
0.01, 0.01, 0.03, -9.06, 0.12, -0.01)), .Names = c("dt_pregao", 
"cd_papel", "veFech"), row.names = c(NA, -10L), class = "data.frame")

1 个答案:

答案 0 :(得分:2)

要调用具有2个以上参数的中缀函数,您需要使用其前缀形式:

`%sum%` <- function(x, y, z = 0) x + y + z

4 %sum% 5
## [1] 9

`%sum%`(4, 5, 6)
## [1] 15

交替重新定义它,以便它只需要2个参数。