# 二種類の代入と c() 関数
a = 4.2
b <- 5.0
c(a, b)[1] 4.2 5.0
= か <- (ALT+-) です。伝統的に使われる代入は <- ですが、私は = を使っています。# 二種類の代入と c() 関数
a = 4.2
b <- 5.0
c(a, b)[1] 4.2 5.0
c() は渡された引数を結合します。# の後から続く文字列はコードとして実行されません。実行されない文書はコメントと呼びます。(a + b) * c(a, b)[1] 38.64 46.00
RStudio の場合 <- は ALT + - のショートカットを定義しています。
整数 integer
実数 double, numeric
複素数 complex number
時系列 time-series (POSIX)
文字列 character
論理値 logical
因子 factor
ベクトル vector
配列 array, matrix
リスト list
テーブル(データフレーム) dataframe
ベクトル
a = c(10.3, 20.2, 30.1)
b = c("rabbit", "cat", "mouse", "dog")
d = c(TRUE, FALSE, T)
e = factor(c("nagasaki", "kagoshima", "fukuoka"))リスト
ベクトルの長さは異なってもいい。 ここでは、リストの要素名を指定しました。
z1 = list("A" = a, "B"= b, "D" = d, "E" = e)データフレーム
ベクトルの長さを揃える必要がある。 ここではb[1:3]をbに渡すことで、変数名を指定しました。
z2 = data.frame(a, b = b[1:3], d, e)Rオブジェクトの構造 (structure) は str() で確認します。
str(z1)List of 4
$ A: num [1:3] 10.3 20.2 30.1
$ B: chr [1:4] "rabbit" "cat" "mouse" "dog"
$ D: logi [1:3] TRUE FALSE TRUE
$ E: Factor w/ 3 levels "fukuoka","kagoshima",..: 3 2 1
リストの要素は次のように抽出できます。
z1$A[1] 10.3 20.2 30.1
リストからの抽出方法は $ 以外に, [ や [[ でもできます。
z1[c("A", "D")]
z1[c(1,4)]
z1[[2]]
z1[[c(2,3)]]
z1[[2]][c(1,2)]str(z2)'data.frame': 3 obs. of 4 variables:
$ a: num 10.3 20.2 30.1
$ b: chr "rabbit" "cat" "mouse"
$ d: logi TRUE FALSE TRUE
$ e: Factor w/ 3 levels "fukuoka","kagoshima",..: 3 2 1
リストと似ていますが、そもそもデータフレームはリストです。 つまり、リストと同じように操作できます。
z2$a[1] 10.3 20.2 30.1
z2[c("a", "d")]
z2[c(1, 4)]
z2[[2]]
z2[[c(2,3)]]
z2[[2]][c(1,2)]&(論理積 AND), | (論理和 OR), !(否定 NOT)A = c(5, 3, 2)
B = c(5, 2, 1)
# 論理積
(A[1] > B[1]) & (A[1] == B[1])[1] FALSE
# 論理和
(A[1] > B[1]) | (A[1] == B[1])[1] TRUE
# 否定と論理積
!(A[1] > B[1]) & (A[1] == B[1])[1] TRUE
# 否定と論理和
(A[1] < B[2]) | !(A[1] == B[1])[1] FALSE
a = c(10.3, 20.2, 30.1)
b = c("rabbit", "cat", "mouse")
d = c(TRUE, FALSE, T)
e = factor(c("nagasaki",
"kagoshima",
"fukuoka"))
Z = data.frame(a, b, d, e)
Z[Z$a > 20, ] a b d e
2 20.2 cat FALSE kagoshima
3 30.1 mouse TRUE fukuoka
Z[Z$a > 10 & Z$a < 20.2, ] a b d e
1 10.3 rabbit TRUE nagasaki
Z[Z$a > 10 & Z$a <= 20.2, ] a b d e
1 10.3 rabbit TRUE nagasaki
2 20.2 cat FALSE kagoshima
Z[identical(Z$a, 20) | !Z$d, ] a b d e
2 20.2 cat FALSE kagoshima
重要! 数値の比較について
パソコンは 2 進数で計算しているので、数値は正確ではない!
たとえば:
0.2 * 0.2 / 0.2 == 0.2 # = と =[1] FALSE
数値の比較をする場合は all.equal() を使いましょう。
# 上のコードと同じ
all.equal(0.2 * 0.2 / 0.2, 0.2, tolerance = 0)[1] "Mean relative difference: 1.387779e-16"
# 機械誤差を考慮した比較
all.equal(0.2 * 0.2 / 0.2, 0.2, tolerance = .Machine$double.eps)[1] TRUE
<, >, >= (> と =), <= (< と =), != (! と =), == (= と =) です。