Code Fix

初級

Rscript では代入や式の結果が自動では表示されない

対話コンソールと違い、Rscriptで実行するスクリプトでは代入文の結果は表示されません。値を画面に出したい場合は明示的にprint()やcat()を呼ぶ必要があります。

なぜエラーが出ないのか

出力:
(エラーなし)
Rは何も報告しません。文法としても実行としても正しいコードだからです
実際の出力 — 期待した結果と食い違っている箇所

このエラーが出る典型パターン

パターン1

 1  price <- 250
 2  qty <- 4
 3  total <- price * qty
              ^
出力:期待: 1000

Rscriptでは代入文の結果は自動表示されません。画面に出したい値は明示的にprint()を呼ぶ必要があります。

直し方: total <- price * qty を print(price * qty) にします。

この問題を解いてみる →

広告
広告スロット(未設定)

パターン2

 1  a <- 10
 2  b <- 4
 3  result <- a + b
           ^
出力:期待: 14

計算結果を変数に代入しただけでは、Rscriptの実行では何も画面に表示されません。

直し方: result <- a + b を print(a + b) にします。

この問題を解いてみる →

パターン3

 1  nums <- c(1, 2, 3)
 2  s <- sum(nums)  
            ^
出力:期待: 6

対話コンソールでは値を計算するだけで表示されることがありますが、Rscriptで実行するスクリプトでは代入の結果は表示されません。

直し方: s <- sum(nums) を print(sum(nums)) にします。

この問題を解いてみる →

パターン4

 1  name <- "Taro"
 2  greeting <- paste("Hello", name)
                    ^
出力:期待: Hello Taro

print()やcat()を呼ばない限り、Rscriptの実行結果は画面に一切表示されません。

直し方: greeting <- paste("Hello", name) を print(paste("Hello", name)) にします。

この問題を解いてみる →

パターン5

 1  x <- 6
 2  y <- 7
 3  product <- x * y
            ^
出力:期待: 42

エラーにはならないため、出力が無いこと自体に気づくのが遅れがちなミスです。

直し方: product <- x * y を print(x * y) にします。

この問題を解いてみる →

よくある誤解

「値を計算すれば自動的にコンソールへ表示されるはず」という思い込みは誤りです。Rscriptとして実行する場合、代入の戻り値は目に見えない形で捨てられ、print()を呼ばない限り何も表示されません。

実務での勘所

対話コンソールで代入以外の式を評価すると、Rは裏側で自動的にその結果をprint()する「自動表示(autoprint)」という仕組みを持っています。Rscriptで実行するバッチモードでは、この自動表示が意図的に無効化されています。interactive()という関数を呼べば、今のコードが対話的に実行されているか、スクリプトとしてバッチ実行されているかをコード自身が判定できます。パッケージのヘルプページの実行例をコンソールにコピペすると表示されるのに、同じコードをスクリプトとして実行すると何も表示されないのは、この違いが原因です。

演習をはじめる

関連するエラー

広告
広告スロット(未設定)