0

私はRで明らかに簡単な問題に直面しています。それは、「コード」の行から引用する(つまり、文字列を作成する)関数(「foo」など)を作成することです。これは例です:

 foo( SELECT * FROM DATA LIMIT 100 )

結果は次のようになります。

"SELECT * FROM DATA LIMIT 100" 

これは評価なしで引用されます (文字列です)。それは、次のようなものに対して機能する必要があります。

foo( 1234 ERE 34e3 & ) 

与える必要があります:

"1234 ERE 34e3 &"

foo( x = 33 + 34 ) 

与える必要があります:

"x = 33 + 34"

何かが足りないと確信していますが、この単純な問題の解決策が本当に見つかりません。

新しい編集:

質問と考えられる回答について多くのコメントがあり、非常に役に立ちましたが (以下を参照)、適切な回答を得たものはありませんでした。

明確にするために、私は自分の質問に対する一般的な解決策にのみ興味があります。したがって、上記のことを実行できる関数があるかどうかを調べます。つまり 、関数が使用される特定のコンテキストの任意のコード/テキスト
独立して引用します。

答えは簡単ではないか、不可能のようです。賢いアイデアが得られるかどうか、まだ試してみることができます。ありがとうございました !

4

3 に答える 3

3

foo( 1234 ERE 34e3 & )R コマンド ラインで入力すると、 thenが呼び出される1234 ERE 34e3 &前に評価されます。fooこれは、 をどのように定義しても問題ないことを意味しfooます。有効でない R コードを渡すと、常にエラーがスローされます。

への呼び出しをラップするか、これに対処する必要がfooありtryますtryCatch

トーマスがコメントで指摘しているように、1234 ERE 34e3 &正しく解析することさえできず、評価を気にしないので、try役に立たない.

この考えを捨てて、他の人がしていることを実行することをお勧めします。
コマンド ラインでコードを直接入力している場合は、その""前後の余分な文字を入力するだけです。コードがファイルにある場合は、readLines(またはscanその他) を使用して、コードを文字列として取得します。

于 2013-08-01T09:37:36.850 に答える
3

私は次のようなものを提案します:

foo <- function(){
    readLines(n=1)
}
z <- foo()
SELECT * FROM DATA LIMIT 100
z
#[1] "SELECT * FROM DATA LIMIT 100"

でも、文脈がないとなんとも言えません。

于 2013-08-01T09:16:10.120 に答える