如何打开功能名称?

Ari*_*man 2 r code-golf

在打高尔夫球时,人们试图用尽可能少的角色完成拼图,通常只使用基本语言.在R中打高尔夫球的一个技巧是使用部分完成,以便例如rle(...)$length可以缩短到rle(...)$l.如何在R中打开函数名称,最好是尽可能少的字符?

Ian*_*ows 9

`?` <- function(object){
    object <- deparse(substitute(object))
    splt <- strsplit(object,"(",fixed=TRUE)[[1]]
    object <- splt[1]
    if(length(splt)>1)
        func <- paste("(",splt[2],collapse="")
    else
        func <- ""
    envs <- sapply(search(),as.environment)
    objs <- do.call("c",lapply(envs,function(x) ls(envir=x,all.names=TRUE)))
    matches <- objs[grep(object,objs)]
    objectMatch <- matches[which.min(nchar(matches))][1]
    res <- eval(parse(text=paste(objectMatch,func,collapse="")), envir = parent.frame())
    res
}
Run Code Online (Sandbox Code Playgroud)

这会使帮助操作符重载,以提供与提供的正则表达式匹配的最短对象.例如:

> ?as.ch
function (x, ...)  .Primitive("as.character")
> a<-1
> ?as.ch(a)
[1] "1"
Run Code Online (Sandbox Code Playgroud)

  • 我们应该开始一个名为"g"的代码高尔夫图书馆. (6认同)
  • 太棒了,现在所需要的只是将它移到核心R中,这样我们就可以编码 - 打高尔夫而不必像上面那样定义函数`?`.不应该很难,因为打高尔夫比帮助更重要;-) (5认同)