2017-09-11 14 views
1

機能を文字列に変換したい。クラス関数をクラス文字に直接変換できないので、functionlistcharacterロジックを使用しています。ただし、listは関数からコメントを削除します。コメントを失うことなく文字列に変換する機能

例:

foo <- function() { 
    1 + 1 
} 
# Can't use as.character(foo), thus: 
as.character(list(foo)) 
    "function() \n{\n 1 + 1\n}" 

機能は、その後のコメントが含まれている場合しかし、それは削除される

bar <- function() { 
    # sum 
    1 + 1 
} 
as.character(list(bar)) 
    "function() \n{\n 1 + 1\n}" 

質問:リストには、機能とどのようにそれらを保存するからコメントを削除するのはなぜ?または関数を文字列に変換するより良い方法は何ですか?

編集:対話型のRセッションにcapture.output作品を使用することにより、MrFlick 提案。しかし、使用code.R場合:

bar <- function() { 
    # sum 
    1 + 1 
} 
# collectMetaData() 
print(paste0(capture.output(print(bar)), collapse="\n")) 

そしてRscript code.R私の出力でそれを実行しようとはまだです:"function() \n{\n 1 + 1\n}"

+2

'paste0てみ'(capture.output(印刷(バー))、= "\ n" を折りたたみます)。それは 'list()'を避けます。これらは 'print.function(... useSource =)'との相違です。コンパイルされた関数にはコメントが含まれていないと思います。コメントは 'srcref' /' srcfile'属性によってのみ追跡されます。 – MrFlick

+0

私はバスに乗るために走らなければならなかったので、私のコンピュータをさらに掘る時間はなかった。他に誰も答えを出さなければ、私は可能な限り展開します。 – MrFlick

+0

@MrFlick capture.outputが必要なようですが、 'Rscript code.R'を使用すると機能しません。関数はコメントなしで保存されます。つまり、対話的にコードを実行すると、 'capture.output'は必要な出力を生成します。 – PoGibas

答えて

3

私は見当がつかない、なぜあなたはそれをやってみたいと思います。これはxyの問題のようです。とにかく、あなたは機能を逆パースしたいように見える:

bar <- function() { 
    # sum 
    1 + 1 
} 

paste(deparse(bar, control = "useSource"), collapse = "\n") 
#[1] "function() {\n # sum\n 1 + 1\n}" 
関連する問題