機能名の完了をオンにするにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/8363900

  •  27-10-2019
  •  | 
  •  

質問

ゴルフでは、通常、基本言語のみを使用して、できるだけ少ない文字でパズルを完成させようとします。 1 騙す Rでのゴルフは、部分的な完成を使用して、 rle(...)$length に短縮できます rle(...)$l. 。 rでファンクション名の完了をオンにすると、できればできるだけ少ない文字でどのようにしますか?

役に立ちましたか?

解決

`?` <- 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
}

これにより、ヘルプオペレーターが過負荷になり、提供される正規表現と一致する最短オブジェクトが提供されます。例えば:

> ?as.ch
function (x, ...)  .Primitive("as.character")
> a<-1
> ?as.ch(a)
[1] "1"

他のヒント

@ianに触発された、 @ianの答えのゴルフバージョンがあります。コンセプトは似ていますが、R-ishハックを使用します(つまり、ツリー操作を呼び出します)

`?`<-function(o)with(x<-as.list(substitute(o)),do.call(apropos(paste("^",deparse(x[[1]]),sep=""))[1],x[-1]))

試す:

> ?me(1:5)
[1] 3
> a<-1;?as.ch(a)
[1] "1"
> 

ゴルフのために、 R のショートカットが必要です function.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top