在打高爾夫球的過程中,人們試圖用盡可能少的字符來完成拼圖,通常只使用基本語言。在R中用於打高爾夫球的一個trick是使用部分完成,例如, rle(...)$length
可以縮短爲rle(...)$l
。在R中如何打開函數名完成,最好是儘可能少的字符?如何打開函數名稱完成?
2
A
回答
8
`?` <- 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"
+5
好極了,現在所需要的只是將其移入核心R,以便我們可以編碼高爾夫,而無需像上面那樣定義函數'?'。不應該很難,因爲高爾夫比幫助重要得多;-) – Tommy
+6
我們應該開始一個名爲「g」的代碼高爾夫球庫。 –
4
受@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
的快捷方式。
相關問題
- 1. 如何打開XML名稱?
- 2. 如何調用一個函數,當shadowbox完成打開
- 3. 完成調用的函數名稱,不存在的函數
- 4. 如何打開名稱由空格組成的文件?
- 5. Xcode 4.3名稱完成
- 6. Xcode自動完成替換函數調用名稱 - 如何刪除佔位符?
- 7. Eclipse自動完成不會在'。'之後顯示函數名稱。
- 8. 打開文件完成
- 9. bash等待打開完成
- 10. 以分數名稱打開文件
- 11. 如何在類成員函數內打印調用者對象名稱?
- 12. 完成函數
- 13. perl:僅打印函數定義名稱
- 14. SymPy只打印函數名稱
- 15. 打印成員名稱
- 16. 函數名稱$
- 17. CField類的成員函數IsDirty名稱
- 18. 名稱查找成員函數
- 19. 如何將此bash完成函數轉換爲zsh完成函數?
- 20. 如何在內核API中打印函數指針的函數名稱?
- 21. 如何在函數內部以Python形式打印函數名稱
- 22. 如何在C++中調用函數時打印每個函數名稱?
- 23. 在Ajax函數成功後打開URL
- 24. 如何知道函數是否完成?
- 25. 如何不等待函數完成python
- 26. 在Python中,如何獲取成員函數類的名稱?
- 27. 如何從另一個生成新的函數名稱
- 28. 如何使用c宏生成函數名稱
- 29. C#如何使用短名稱打開程序集(或只有短名稱時如何獲得強名稱)
- 30. 如何將一個成員函數名稱賦值給一個函數對象?
是不是有goruby? – ninjalj