私は私のシナリオは私が書いてきたすべてが他の関数への呼び出しを行う機能を有していることであるR.でisdebugged()
にグローバル対応を見つけようとしています、と私は回していますdebug()
は、デバッグ中にさまざまな機能をオン/オフします。しかし、どの機能がデバッグされるように設定されているかはわかりません。私がループを忘れて始めると、もっと多くの出力(厄介ではないがひどい)が得られるかもしれません。リスト機能はRに設定
私の現在のアプローチは、以下のような関数を使用することです。listDebugged(ls())
で呼び出すか、読み込まれたライブラリの項目をリストすることができます(下記の例を参照)。これで十分ですが、ワークスペースまたはロードされているパッケージのすべての関数のリストで呼び出す必要があります。私はこれらを取得する別の関数をラップすることができます。デバッグ機能を直接質問する簡単な方法や、デバッグフラグが設定された関数のリストを隠している環境の不明瞭な部分を照会する方法があるようです。だから、
、2つのパートの質問:
- は、デバッグフラグを設定して機能を照会するために存在する単純な呼び出しはありますか?
- もしそうでなければ、私が見落としてきた細かいことはありますか?たとえば、あるパッケージのある関数が別のパッケージをマスクすると、誤解を招く結果が返ってくる可能性があります。
私は試みることができる、それはまた、デバッグ関数名の隠されたリストを維持する関数内debug
とundebug
をラップすることです別の方法があることを認識しています。私はまだそれが安全なことだとは確信していません。
UPDATE(8/5/11):私はSO検索、およびそれ以前の質問を見つけることができませんでした。しかし、SOの "関連する質問"リストには、an earlier question that is similarが表示されていますが、その質問に対する回答の機能は@cbeleitesが提供する機能よりも冗長で低速です。私がしていた間、古い質問はまたコードを提供しません。 :)
コード:
listDebugged <- function(items){
isFunction <- vector(length = length(items))
isDebugged <- vector(length = length(items))
for(ix in seq_along(items)){
isFunction[ix] <- is.function(eval(parse(text = items[ix])))
}
for(ix in which(isFunction == 1)){
isDebugged[ix] <- isdebugged(eval(parse(text = items[ix])))
}
names(isDebugged) <- items
return(isDebugged)
}
# Example usage
listDebugged(ls())
library(MASS)
debug(write.matrix)
listDebugged(ls("package:MASS"))
Rベースでは、 'debug'関数をラップする以外の方法はありません。 – kohske