工作地方自行變成 Linux 機後,可以研習的東西多了很多。
以前寫落不少小程序,是用 R 來生產一些每月都要 Run 一次的 Report 。用到 R2HTML 這個套件。
以前都是用 emacs 中的 ESS 來行 R Script ,都覺得煩。
最後想試下在 Shell 中行,一輸入搞掂那種。
經過訪查之後,係可以這樣:

#!/usr/bin/env Rscript
# chew that < -
hello <- 1+1
hello

秘密是在第一句的 shebang 。將以上東西 save 成一個 test.R ,再將它轉成 executable (chmod +x test.R) 及在 shell 執行。 (./test.R)

chainsaw@revo:~$ ./test.R
[1] 2

甚至可以有 command argument ,可用到 R 的 commandArgs() function 。

#!/usr/bin/env Rscript
# chew that < -
args <- commandArgs()
args

例如在 shell 輸入

chainsaw@revo:~$ ./test.R 1 2
[1] "/usr/lib/R/bin/exec/R" "--slave" "--no-restore"
[4] "--file=./test.R" "--args" "1"
[7] "2"

1 和 2 就會是 args 的第六及第七位,但需注意是以 String 儲存,而非 numeric 。

#!/usr/bin/env Rscript                                                                                            
# chew that < -                                                                                                    
args <- commandArgs()
mynum <- as.numeric(args[6])
hello <- 1+mynum
hello

當輸入 ./test.R 及 argument ,結果是

chainsaw@revo:~$ ./test.R 1
[1] 2
chainsaw@revo:~$ ./test.R 11
[1] 12