11

PythonコードのチャンクをRのPythonにのようなもので渡したいのですがsystem('python ...')、この場合、Pythonコンソールをエミュレートする簡単な方法があるかどうか疑問に思っています。たとえば、コードがであるとすると、"print 'hello world'"Rでこのような出力を取得するにはどうすればよいですか?

>>> print 'hello world'
hello world

これは出力のみを表示します:

> system("python -c 'print \"hello world\"'")
hello world

ありがとう!

ところで、私はr-helpで質問しましたが、まだ応答がありません(応答がある場合は、ここに回答を投稿します)。

4

3 に答える 3

11

このようなことを意味しますか?

export NUM=10
R -q -e "rnorm($NUM)"

また、チェックアウトしたいかもしれませんlittler- http://dirk.eddelbuettel.com/code/littler.html

更新しました

以下のあなたのコメントに従って、私はあなたの質問をよりよく理解し始めていると思います. Rシェル内でpythonを実行することについて質問しています。

ここに例があります: -

# code in a file named myfirstpythonfile.py

a = 1 
b = 19
c = 3 
mylist = [a, b, c]
for item in mylist:
    print item

したがって、R シェルで次のようにします。

> system('python myfirstpythonfile.py')
1
19
3

基本的に、python /path/to/your/python/file.pyPython コードのブロックを呼び出すだけで実行できます。

私の場合、python myfirstpythonfile.pyPython ファイルが存在する同じディレクトリ (パス) で R シェルを起動したと仮定して、単純に呼び出すことができます。

さらに更新

そして、本当にソース コードを印刷したい場合は、可能性のある力ずくの方法を次に示します。R シェルで:-

> system('python -c "import sys; sys.stdout.write(file(\'myfirstpythonfile.py\', \'r\').read());"; python myfirstpythonfile.py')
a = 1
b = 19
c = 3
mylist = [a, b, c]
for item in mylist:
    print item
1
19
3

そしてさらに更新されました:-)

したがって、目的がコードの実行前に Python コードを出力することである場合は、Python トレース モジュール (参照: http://docs.python.org/library/trace.html ) を使用できます。コマンド ラインでは、-mオプションを使用して python モジュールを呼び出し、それに続くその python モジュールのオプションを指定します。

したがって、上記の例では、次のようになります。

$ python -m trace --trace myfirstpythonfile.py
 --- modulename: myfirstpythonfile, funcname: <module>
myfirstpythonfile.py(1): a = 1
myfirstpythonfile.py(2): b = 19
myfirstpythonfile.py(3): c = 3
myfirstpythonfile.py(4): mylist = [a, b, c]
myfirstpythonfile.py(5): for item in mylist:
myfirstpythonfile.py(6):     print item
1
myfirstpythonfile.py(5): for item in mylist:
myfirstpythonfile.py(6):     print item
19
myfirstpythonfile.py(5): for item in mylist:
myfirstpythonfile.py(6):     print item
3
myfirstpythonfile.py(5): for item in mylist:
 --- modulename: trace, funcname: _unsettrace
trace.py(80):         sys.settrace(None)

ご覧のとおり、これは Python コードの正確な行をトレースし、直後に結果を実行して stdout に出力します。

于 2012-04-14T17:30:58.557 に答える
2

システム コマンドには、 というオプションがありますintern = FALSE。これTRUEを行うと、直前に表示されていた出力が変数に格納されます。

このオプションを指定してシステムコマンドを実行すると、変数に直接出力が得られるはずです。このような

tmp <- system("python -c 'print \"hello world\"'",intern=T)
于 2013-08-08T14:14:55.280 に答える