R(制御構文)

2024年3月17日 (日)

[R]条件式で条件を設定してエラーを出す

stopifnot関数を使う。引数に与えた一つ以上の式が一つでもFALSEの場合は、エラーを出す。スクリプトでうまく使えばデバッグに利用できる。

> no <- 58
> umamusume <- "メイショウドトウ"
> cv <- "和多田美咲"
> stopifnot(no == 58)
> stopifnot(no == 58, umamusume == "メイショウドトウ")
> stopifnot(no == 58, umamusume == "メイショウドトウ", cv == "石見舞菜香")
エラー: cv == "石見舞菜香" は TRUE ではありません
> for (i in 1:5) {stopifnot(i < 3); cat(i, "\n")}
1
2
エラー: i < 3 は TRUE ではありません

2023年3月31日 (金)

[R]パイプライン機能を使う

dplyrパッケージの%>%演算子を使う。以下はデータAirPassengersの先頭から10個のレコードを表示させるために、%>%演算子によるパイプライン機能を使用して抽出した例。

> head(AirPassengers)
[1] 112 118 132 129 121 135
> head(AirPassengers, 10)
[1] 112 118 132 129 121 135 148 148 136 119
> AirPassengers %>% head()
AirPassengers %>% head() でエラー:
関数 "%>%" を見つけることができませんでした
> library(dplyr)
> AirPassengers %>% head()
[1] 112 118 132 129 121 135
> AirPassengers %>% head(10)
[1] 112 118 132 129 121 135 148 148 136 119

%>%演算子は、次の受け取った出力を次の関数の第一引数に与える。受ける関数は、第一引数を省略して記述すればよい。

> dtf <- data.frame(no = 1:12, month = month.abb)
> head(dtf)
no month
1 1 Jan
2 2 Feb
3 3 Mar
4 4 Apr
5 5 May
6 6 Jun
> subset(dtf, no == 3 | no == 4)
no month
3 3 Mar
4 4 Apr
> dtf %>% subset(no == 3 | no == 4)
no month
3 3 Mar
4 4 Apr

2022年8月23日 (火)

[R]条件演算子(三項演算子)を使う

Rには条件演算子(三項演算子)はなく、ifelse関数で代用することができる。

ifelse(v1, v2, v3)

v1は論理型ベクトルで、v1が真(TRUE)の場合はv2が、偽(FALSE)の場合はv3が戻り値になる。

> n <- 3
> n <- c(1, 2, 3)
> ifelse(n >= 2, c("A", "B", "C"), c("a", "b", "c"))
[1] "a" "B" "C"