R Language
文字列の読み書き
サーチ…
備考
関連するドキュメント:
文字列の表示と表示
Rには、情報の印刷や表示に使用できる組み込み関数がいくつかありますが、 print
とcat
が最も基本的です。 Rはインタープリター言語なので、Rコンソールで直接試すことができます:
print("Hello World")
#[1] "Hello World"
cat("Hello World\n")
#Hello World
2つの機能の入力と出力の違いに注意してください。 (注:引用文字は、の値ではありませんx
で作成したx <- "Hello World"
。彼らはによって追加されprint
出力段に。)
cat
は、1つ以上の文字ベクトルを引数としてとり、それらをコンソールに出力します。文字ベクトルの長さが1より大きい場合、引数はスペースで区切られます(デフォルト)。
cat(c("hello", "world", "\n"))
#hello world
改行文字( \n
)がなければ、出力は次のようになります。
cat("Hello World")
#Hello World>
次のコマンドのプロンプトが出力の直後に表示されます。 (RStudioなどのコンソールによっては、改行で終わらない文字列に自動的に改行を追加することがあります)。
print
は渡された最初の引数のクラスが検出され、クラス固有のメソッドが出力に使用されることを意味する「汎用」関数の例です。 "Hello World"
ような文字ベクトルの場合、結果はcat
の出力に似ています。ただし、文字列が引用され、文字ベクトルの最初の要素(この場合は最初の要素のみ)を示す数字[1]
が出力されます。
print("Hello World")
#[1] "Hello World"
このデフォルトの印刷方法は、単にRに変数の印刷を依頼するときに表示されるものです。入力s
出力がprint(s)
またはprint("Hello World")
を呼び出すのと同じであることに注意してください:
s <- "Hello World"
s
#[1] "Hello World"
あるいは何にも割り当てなくても:
"Hello World"
#[1] "Hello World"
我々は(使用して、ベクトルの2番目の要素として、別の文字列を追加する場合はc()
一緒要素oncatenate Cに機能)、その後の行動print()
のそれとはかなり異なって見えるcat
:
print(c("Hello World", "Here I am."))
#[1] "Hello World" "Here I am."
c()
関数は文字列連結を行わないことに注意してください。 (その目的のためにpaste
を使用する必要があります。)Rは、文字ベクトルに2つの要素が別々に引用されていることを示しています。複数の行にまたがるベクトルがあれば、最初の行の先頭に[1]
を表示するのと同様に、Rは各行を開始する要素のインデックスを出力します。
c("Hello World", "Here I am!", "This next string is really long.")
#[1] "Hello World" "Here I am!"
#[3] "This next string is really long."
print
の特定の動作は、関数に渡されるオブジェクトのクラスによって異なります。
「数値」や「論理」などの異なるクラスのオブジェクトをprint
と呼び出すと、文字クラスではないオブジェクトを扱っていることを示すために、出力から引用符が省略されます。
print(1)
#[1] 1
print(TRUE)
#[1] TRUE
Factorオブジェクトは、コンソール出力を使用してSO質問本体にオブジェクトを表示すると、しばしばあいまいさを生じる文字変数と同じ方法で印刷されます。インタラクティブな状況を除いてcat
やprint
を使用することはまれです。明示的にprint()
呼び出すことは、コンソールでのfoo
入力がprint(foo)
ショートカットであるため、特に稀です(引用符の表示を非表示にするか、関数によってinvisible
として返されるオブジェクトを表示しない限りprint(foo)
。 Rの対話型コンソールは、REPL(read-eval-print-loop)として知られています。 cat
関数は特別な目的のために保存するのが最善です(オープンファイル接続への出力の書き込みなど)。ときどき関数内で使用されることがありますが( print()
への呼び出しは抑制されます)、 関数内でcat()
を使用してコンソールへの出力を生成するのは悪い習慣です。推奨される方法は、中間メッセージの場合はmessage()
またはwarning()
です。それらはcat
と同様に動作しますが、オプションでエンドユーザーが抑制することができます。最終結果は、ユーザーが必要に応じて保管するために割り当てることができます。
message("hello world")
#hello world
suppressMessages(message("hello world"))
ファイル接続の読み書き
必ずしもローカルシステムのパスから読み書きする自由はありません。例えば、R code streaming map-reduceがファイル接続を読み書きする必要がある場合などです。ローカルシステムを越え、クラウドや大きなデータの出現を踏まえた別のシナリオもありますが、これはますます一般的になっています。これを行う方法の1つは、論理的な順序です。
file()
コマンドで読み込むファイル接続を確立します( "r"は読み込みモード用です):
conn <- file("/path/example.data", "r") #when file is in local system
conn1 <- file("stdin", "r") #when just standard input/output for files are available
これによりファイル接続のみが確立されるため、次のようにこれらのファイル接続からデータを読み取ることができます。
line <- readLines(conn, n=1, warn=FALSE)
ここでは、ファイル接続conn
から行ごとにn=1
としてデータを読み込みます。高速読み出し(1回で10または20行のブロック読み出し)のためにデータブロックを読み取るためのn
(たとえば10,20など)の値を変更することができます。 1つの完全なファイルを読むには、 n=-1
設定します。
データ処理後、またはモデル実行後。ファイル接続に書き込むことができるwriteLines(),cat()
などの多くの異なるコマンドを使用して結果をファイル接続に書き戻すことができます。ただし、これらのコマンドはすべて、書き込み用に確立されたファイル接続を利用します。これは、 file()
コマンドを次のように使用してfile()
できます。
conn2 <- file("/path/result.data", "w") #when file is in local system
conn3 <- file("stdout", "w") #when just standard input/output for files are available
次に、次のようにデータを書き込みます。
writeLines("text",conn2, sep = "\n")
オペレーティングシステムコマンドの出力をキャプチャする
文字ベクトルを返す関数
ベースR
は、システムコマンドを呼び出すための2つの機能があります。両方とも、システムコマンドの出力をキャプチャするために追加のパラメータが必要です。
system("top -a -b -n 1", intern = TRUE)
system2("top", "-a -b -n 1", stdout = TRUE)
どちらも文字ベクトルを返します。
[1] "top - 08:52:03 up 70 days, 15:09, 0 users, load average: 0.00, 0.00, 0.00"
[2] "Tasks: 125 total, 1 running, 124 sleeping, 0 stopped, 0 zombie"
[3] "Cpu(s): 0.9%us, 0.3%sy, 0.0%ni, 98.7%id, 0.1%wa, 0.0%hi, 0.0%si, 0.0%st"
[4] "Mem: 12194312k total, 3613292k used, 8581020k free, 216940k buffers"
[5] "Swap: 12582908k total, 2334156k used, 10248752k free, 1682340k cached"
[6] ""
[7] " PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND "
[8] "11300 root 20 0 1278m 375m 3696 S 0.0 3.2 124:40.92 trala "
[9] " 6093 user1 20 0 1817m 269m 1888 S 0.0 2.3 12:17.96 R "
[10] " 4949 user2 20 0 1917m 214m 1888 S 0.0 1.8 11:16.73 R "
例として、UNIXコマンド
top -a -b -n 1
が使用されています。これはOS固有のものであり、コンピュータ上でサンプルを実行するために修正する必要がある場合があります。
パッケージdevtools
は、システムコマンドを実行し、追加パラメータなしで出力をキャプチャする機能があります。また、文字ベクトルを返します。
devtools::system_output("top", "-a -b -n 1")
データフレームを返す関数
data.table
パッケージのfread
関数は、シェルコマンドを実行し、 read.table
ような出力を読み取ることを可能にします。それは返しdata.table
またはdata.frame
。
fread("top -a -b -n 1", check.names = TRUE)
PID USER PR NI VIRT RES SHR S X.CPU X.MEM TIME. COMMAND
1: 11300 root 20 0 1278m 375m 3696 S 0 3.2 124:40.92 trala
2: 6093 user1 20 0 1817m 269m 1888 S 0 2.3 12:18.56 R
3: 4949 user2 20 0 1917m 214m 1888 S 0 1.8 11:17.33 R
4: 7922 user3 20 0 3094m 131m 1892 S 0 1.1 21:04.95 R
そのfread
自動的に上位6個のヘッダ行をスキップしています。
ここでは、
%CPU
、%MEN
、およびTIME+
を構文的に有効な列名に変換するために、check.names = TRUE
パラメータが追加されました。