22
24

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Rでちゃんとしたプログラムを書くために

Posted at

しっかりしたRのプログラムを書こうとした時に、とりあえず知っておくと良い知識をまとめました。

ソースとしては以下を参照:

ディレクトリ構成

以下の関数で自動生成することができる。

package.skeleton
.
├── DESCRIPTION
├── NAMESPACE
├── MD5
├── R
│   └── package_name.R
├── data
│   └── sample_data.Rda
├── man
│   ├── some_function.Rd
│   └── the_other_function.Rd
└── tests
    └── package_name_test.R

ファイル名

アンダースコアでつなぎ.Rと大文字で終わる。

great_program.R

変数名

dot.splitedというように.でつなぐこと推奨。-_は使わない。場合によっては、camelCaseもOK。

関数名

付け方は特に規定されていないが、GoogleはCamelCase(arg1, arg2 = val)というように大文字始まりのキャメルケースを推奨している模様。

Rのデフォルトはis.func(x)というように変数名と同様だが、この方法だとisインスタンスのfuncメソッドとも解釈できてしまうので良くない。大文字始まりが嫌いなら小文字のcamelCaseにすると良い。

関数の引数

デフォルト引数のあるものは最後に書く。(デフォルト引数は=を使う。)
折り返すときは、=の前後では折り返さない。

short <- function(a1, a2, a3 = value)

LongFunction <- function(arg1,
                         arg2,
                         arg3 = default_value) 

代入

<-を使う。=は使わない。

コメントの書き方

#の後に1つ空白を空けた後、コメントを書く。
ソースと同じ行にコメントを書く場合、前に2つスペースを空ける。

# Create histogram of frequency of campaigns by pct budget spent.
hist(df$pct.spent,
     breaks = "scott",  # method for choosing number of buckets

起動方法

インタプリタとしてRを起動したい時

-no-saveをつけると作業スペースを保存しないので便利。

$ R –no-save

プログラムを実行したい時

$ R --vanilla --slave < sample.R

プログラムを実行したい時(引数あり)

--argsパラメータを渡すと、RプログラムからcommandArgs()として受け取れるようになる。

$ R --vanilla --slave --args 1 2 str < test.R

commandArgs()の中身は"R" "--vanilla" "--slave" "--args" "1" "2" "str"となり使いにくい。
commandArgs(trailingOnly = T)とすると"1" "2" "str"となり、扱いやすくなる。
数字を数値として扱うときは、as.numericを使って変換する必要がある。

22
24
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
24

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?