Rscript では代入や式の結果が自動では表示されない
対話コンソールと違い、Rscriptで実行するスクリプトでは代入文の結果は表示されません。値を画面に出したい場合は明示的にprint()やcat()を呼ぶ必要があります。
なぜエラーが出ないのか
出力:
(エラーなし)- Rは何も報告しません。文法としても実行としても正しいコードだからです
- 実際の出力 — 期待した結果と食い違っている箇所
このエラーが出る典型パターン
パターン1
1 price <- 250 2 qty <- 4 3 total <- price * qty ^
Rscriptでは代入文の結果は自動表示されません。画面に出したい値は明示的にprint()を呼ぶ必要があります。
直し方: total <- price * qty を print(price * qty) にします。
パターン2
1 a <- 10 2 b <- 4 3 result <- a + b ^
計算結果を変数に代入しただけでは、Rscriptの実行では何も画面に表示されません。
直し方: result <- a + b を print(a + b) にします。
パターン3
1 nums <- c(1, 2, 3) 2 s <- sum(nums) ^
対話コンソールでは値を計算するだけで表示されることがありますが、Rscriptで実行するスクリプトでは代入の結果は表示されません。
直し方: s <- sum(nums) を print(sum(nums)) にします。
パターン4
1 name <- "Taro" 2 greeting <- paste("Hello", name) ^
print()やcat()を呼ばない限り、Rscriptの実行結果は画面に一切表示されません。
直し方: greeting <- paste("Hello", name) を print(paste("Hello", name)) にします。
パターン5
1 x <- 6 2 y <- 7 3 product <- x * y ^
エラーにはならないため、出力が無いこと自体に気づくのが遅れがちなミスです。
直し方: product <- x * y を print(x * y) にします。
よくある誤解
「値を計算すれば自動的にコンソールへ表示されるはず」という思い込みは誤りです。Rscriptとして実行する場合、代入の戻り値は目に見えない形で捨てられ、print()を呼ばない限り何も表示されません。
実務での勘所
対話コンソールで代入以外の式を評価すると、Rは裏側で自動的にその結果をprint()する「自動表示(autoprint)」という仕組みを持っています。Rscriptで実行するバッチモードでは、この自動表示が意図的に無効化されています。interactive()という関数を呼べば、今のコードが対話的に実行されているか、スクリプトとしてバッチ実行されているかをコード自身が判定できます。パッケージのヘルプページの実行例をコンソールにコピペすると表示されるのに、同じコードをスクリプトとして実行すると何も表示されないのは、この違いが原因です。