17

私はjupyterをconda install jupyterインストールし、rカーネルがインストールされたノートブックを実行していますconda create -n my-r-env -c r r-essentials

ノートブックを実行していて、シェルから bash コマンドを実行したいと考えています。

!echo "hi"
Error in parse(text = x, srcfile = src): <text>:1:7: unexpected string constant
1: !echo "hi"

比較のために、Python カーネルを使用したノートブックでは次のようになります。

!echo "hi"
hi

R ノートブックを設定して、bash コマンド (およびその他の魔法) に関して ipython ノートブックと同じ機能を持たせる方法はありますか?

4

2 に答える 2

14

bash コマンドだけでも、システム コマンドを機能させることができます。たとえば、IRkernel では次のようになります。

system("echo 'hi'", intern=TRUE)

出力:

'hi'

または、ファイルの最初の 5 行を表示するには:

system("head -5 data/train.csv", intern=TRUE)

IPython マジックは IPython カーネルで利用できる (IRkernel では利用できない) ため、rPythonおよびPythonInRライブラリを使用してこれらにアクセスできるかどうかを簡単に確認しました。ただし、問題はget_ipython()Python コードには表示されないため、次のいずれも機能しませんでした。

library("rPython")
rPython::python.exec("from IPython import get_ipython; get_ipython().run_cell_magic('writefile', 'test.txt', 'This is a test')")

library("PythonInR")
PythonInR::pyExec("from IPython import get_ipython; get_ipython().run_cell_magic('head -5 data/test.csv')")
于 2016-04-19T08:23:58.123 に答える
5

呼び出しをラップして区切り記号として指定することにより、 の出力の表面的な改善をsystem得ることができます。これにより、文字ベクトルの既定である空白で区切られる代わりに、別の行に出力が表示されます。これは、改行で区切られていないと出力の形式がほとんど意味をなさないため、 のようなコマンドに非常に役立ちます。cat'\n'tree

という名前のサンプル ディレクトリについて、以下を比較してくださいtest

バッシュ

$ tree test
test
├── A1.tif
├── A2.tif
├── A3.tif
├── README
└── src
    ├── sample.R
    └── sample2.R

1 directory, 6 files

Jupyter Notebook の R

systemのみ、出力を理解するのが難しい:

> system('tree test', intern=TRUE)

'test' '├── A1.tif' '├── A2.tif' '├── A3.tif' '├── README' '└── src' '    ├── sample.R' '    └── sample2.R' '' '1 directory, 6 files

cat+ system、出力は bash で次のようになります。

> cat(system('tree test', intern=TRUE), sep='\n')

test
├── A1.tif
├── A2.tif
├── A3.tif
├── README
└── src
    ├── sample.R
    └── sample2.R

1 directory, 6 files

のようなコマンドの場合ls、上記は、出力が通常 bash のスペースで区切られる改行を導入することに注意してください。

入力を節約する関数を作成できます。

> # "jupyter shell" function
> js <- function(shell_command){
>     cat(system(shell_command, intern=TRUE), sep='\n')
> }
>
> # brief syntax for shell commands
> js('tree test')
于 2018-05-09T17:44:45.123 に答える