値(定数)

# 数値
3
## [1] 3
-2
## [1] -2
# シャープ記号の後ろは「コメント」.実行時に無視されるので,説明に.
# 100

# 文字列は,ダブルクォーテーションまたはシングルクォーテーションで括る
"Hello World!"
## [1] "Hello World!"
# 真偽値という特殊な値 ⇒ 条件分岐などで使用
TRUE  # 真
## [1] TRUE
FALSE  # 偽
## [1] FALSE

四則演算+アルファ

# 足し算
2 + 4
## [1] 6
# 引き算
-3 - 8
## [1] -11
# 掛け算
4*5
## [1] 20
4 * 5
## [1] 20
# 式の中のスペースは実行結果に影響しない.読み易いように入れるのが良い.

# 割り算
4 / 5
## [1] 0.8
# 演算の優先順序は,数学と同じ.必要に応じて括弧で指定.
2 + 3 * 5
## [1] 17
(2 + 3) * 5
## [1] 25
# 整数商
8 %/% 5
## [1] 1
# 剰余
# 整数商
8 %% 5
## [1] 3
# べき乗
3^2
## [1] 9
3^3
## [1] 27
# ===========================
# 変数の代入と使用
# ===========================

# 変数(=容れ物)に数値を代入する
x <- 10
y <- 3

# 実は等号でも代入できるが,良くない.※関数での「引数」の指定と混乱する.
x = 8
x
## [1] 8
# 円周率は特殊な変数として準備されている
pi
## [1] 3.141593
# 変数に対する演算
sum_result <- x + y
product_result <- x * y
quotient_result <- x / y

sum_result
## [1] 11
product_result
## [1] 24
quotient_result
## [1] 2.666667
# 代入した結果を同じ変数に代入し直すと,値が上書きされる.
x <- 4
x
## [1] 4
x <- x^2
x
## [1] 16
# 文字列の変数も.文字列は
msg <- "Hello World!"
msg
## [1] "Hello World!"
# ===========================
# 関数 (1)
# ===========================

# これまでの,変数や定数だけの式は,実は print()関数が実行されていた.
# 表示の意図を持つ場合,print() 関数を明示的に使用するように.
print(3+5)
## [1] 8
sum_result <- 3 + 5
print(sum_result)
## [1] 8
# 複数の行を,";" を挟み繋げることもできるが,意味が明確な場合以外はお勧めしない.
x <- 10; y <- 20
print(x+y)
## [1] 30
# 絶対値
abs(-3.5)
## [1] 3.5
# 平方根
sqrt(4)
## [1] 2
# 指数を使っても良い
4^(1/2)
## [1] 2
# 指数関数
exp(2)
## [1] 7.389056
# ※自然対数の底 e (ネイピア数)は,指数関数 exp() を用いてexp(1)で.
exp(1)
## [1] 2.718282
# 対数関数
log(100)  # 自然対数
## [1] 4.60517
log10(100)  # 常用対数
## [1] 2
log2(4)  # 二進対数
## [1] 2
# 文字列を結合する paste() 関数
x <- 10; y <- 20
paste("x=", x, ", y=", y)
## [1] "x= 10 , y= 20"
# デフォルトだと,文字列の結合にスペースを挟む.sep引数を指定することで変えられる.
paste("x=", x, ", y=", y, sep="")  # スペース無し 
## [1] "x=10, y=20"
#paste("x=", x, ", y=", y, sep="???")  # ???


# ===========================
# ヘルプ
# ===========================

# 関数やキーワード等のヘルプは,コンソールで help("対象")のように実行.
help("print")
## httpd ヘルプサーバーを起動... 完了
# 存在しない対象のヘルプは出ない
#help("hoge")

# RStudioでは,関数の途中や引数の所で Tabキーを押すと,候補を表示してくれる.


# ===========================
# ベクトルの基礎
# ===========================

# c() で複数の値を囲むことで,組であるベクトルが出来る.
c(2, 5, -3, 1, 4)
## [1]  2  5 -3  1  4
# 変数にも代入可能
x <- c(2, 5, -3, 1, 4)
x
## [1]  2  5 -3  1  4
# 要素は角括弧で添字を指定して取り出し. 添字は1から.
x[1]  # 1番目の要素
## [1] 2
x[2]  # 2番目の要素
## [1] 5
x[5]  # 5番目の要素
## [1] 4
x[6]  # 存在しない要素を参照すると,"NA" (not available) という特殊な値が返される
## [1] NA
# 特定要素への値の代入
x[1] <- -10
x
## [1] -10   5  -3   1   4
# ベクトルの長さ
length(x)
## [1] 5
# これを添字に使って,末尾の要素を取り出せる
x[length(x)]
## [1] 4
# 続き数は ":"を使っても作れる
y <- 1:5
y
## [1] 1 2 3 4 5
# 同じ長さのベクトル同士では,要素ごとのベクトル演算ができる
z <- x + y
z
## [1] -9  7  0  5  9
# 長さが違うベクトル同士ではダメ.(実行できるが,ワーニング)
y <- 1:6
x+y
## Warning in x + y:
## 長いオブジェクトの長さが短いオブジェクトの長さの倍数になっていません
## [1] -9  7  0  5  9 -4
# 同じ値をn回繰り返すベクトルを作る関数 rep()
x <- rep(5, 10)  # 5を10個
x
##  [1] 5 5 5 5 5 5 5 5 5 5
# 最初の値から最後の値まで,一定の刻み幅のベクトルを作る関数 seq()
x <- seq(0, 5, 0.1) # 0から5まで,0.1刻みで.
x
##  [1] 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8
## [20] 1.9 2.0 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 3.0 3.1 3.2 3.3 3.4 3.5 3.6 3.7
## [39] 3.8 3.9 4.0 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 5.0
x <- seq(from=0, to=5, by=0.1) # 同じだが,引数を指定するとより分かりやすい
x
##  [1] 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8
## [20] 1.9 2.0 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 3.0 3.1 3.2 3.3 3.4 3.5 3.6 3.7
## [39] 3.8 3.9 4.0 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 5.0
# ===========================
# 関数 (2)
# ===========================

x <- c(2, 5, -3, 1, 4)

# 最小値,最大値
paste("x内の最小値:", min(x))
## [1] "x内の最小値: -3"
paste("x内の最大値:", max(x))
## [1] "x内の最大値: 5"
# 平均値,中央値
paste("x内の平均値:", mean(x))
## [1] "x内の平均値: 1.8"
paste("x内の中央値:", median(x))
## [1] "x内の中央値: 2"
# ===========================
# 関数 (3)
# ===========================

# ベクトルの絶対値⇒個々の要素の絶対値のベクトル
abs(x)
## [1] 2 5 3 1 4
# 三角関数
x <- seq(from=0, to=5, by=0.01)
y <- sin(x)
# y <- cos(x)
# プロット(点)
plot(x, y)

# プロット(線)
plot(x, y, type="l")
# 関数の組み合わせ,プロットに追加
lines(x, abs(y), col="red")

# ===========================
# 制御構文の基礎
# ===========================

# 条件式: 真偽値をとる
3 > 5  # 「3は5より大きい」⇒偽(FALSE)
## [1] FALSE
3 == 5  # 「3は5と等しい」⇒偽(FALSE)
## [1] FALSE
3 < 5  # 「3は5より小さい」⇒真(TRUE)
## [1] TRUE
# if-else 条件分岐
x <- 3; y <- 5
# x <- 3; y <- -2
# x <- y <- 3  # 同じ値は一度に代入も出来る
if (x > y) {
  print("x は y より大きい.")
} else {
  print("x は y 以下である.")
}
## [1] "x は y 以下である."
# 条件に合致しない時は何もしないなら,else ブロックは省ける
if (x > y) {
  print("x は y より大きい.")
}

# 多段の条件分岐
# x <- 3; y <- 5
# x <- 3; y <- -2
x <- y <- 3  # 同じ値は一度に代入も出来る
if (x > y) {
  print("x は y より大きい.")
} else if(x == y) {
  print("x と y は等しい.")
} else {
  print("x は y より小さい.")
}
## [1] "x と y は等しい."
# for ループ
for (x in 1:3) {
  x
}
# ⇒ コードブロック内では,print()しないと表示されない.
for (x in 1:3) {
  print(x)
}
## [1] 1
## [1] 2
## [1] 3
# ⇒ 明示的に print() すれば,期待通り表示される.

# 演算と条件分岐の組み合わせ
xs <- c(2, 5, -3, 1, 4)
sum_x_pos <- 0
for (x in xs) {
  if (x > 0) {
    sum_x_pos <- sum_x_pos + x
  }
}
print(paste("合計:", sum_x_pos))  # ⇒ 2+5+1+4=12に一致.
## [1] "合計: 12"
# whileループ,処理のスキップ,ループからの脱出
# 1から順に1つずつ足して,現在の値を表示するが:
# - 5は表示せずスキップ(next)
# - 7になったらループを終了(break)
i <- 1  # カウンターの初期値
while (TRUE) {
  # 7になったらループ終了
  if (i == 7) {
    print("7に達したのでループを終了します。")
    break  # whileループを抜ける.※この行をコメントアウトすると,無限ループに.
  }
  
  # 5はスキップ(何も表示しない)
  if (i == 5) {
    i <- i + 1  # nextの前にカウンターを進めるのを忘れずに!
    next  # 残りの処理をスキップして次のループへ
  }
  
  # 上記以外のときは i を表示
  print(paste("現在のiは", i))
  
  i <- i + 1  # カウンターを進める
}
## [1] "現在のiは 1"
## [1] "現在のiは 2"
## [1] "現在のiは 3"
## [1] "現在のiは 4"
## [1] "現在のiは 6"
## [1] "7に達したのでループを終了します。"
# 間違って無限ループを実行してしまったときは,コンソールタイトルバーに現れるStopボタンを押すか,


# ===========================
# データフレームの基礎
# ===========================

# 同じ長さのベクトルを組み合わせて,データフレームを作成: 
x <- seq(from=0, to=5, by=0.1)
y <- sin(x)
z <- cos(x)
df_xyz <- data.frame(x, y, z)
df_xyz  # 全体を表示
View(df_xyz)  # 別ウィンドウで表示
nrow(df_xyz) # 行数
## [1] 51
ncol(df_xyz) # 列数
## [1] 3
dim(df_xyz)  # c(行数, 列数)のベクトル
## [1] 51  3
colnames(df_xyz)  # データフレームの列名
## [1] "x" "y" "z"
names(df_xyz)  # データフレーム(やリスト)の列名
## [1] "x" "y" "z"
# 最初の3行
head(df_xyz, n = 3)
# nを省くとデフォルトの6行
head(df_xyz)
# 最後の6行
tail(df_xyz)
# ※head(), tail()関数は ベクトルにも使える.

# i行目,j列目の要素はdf[i, j]のようにアクセス
df_xyz[3, 2]  # 3行目,2列目
## [1] 0.1986693
# 代入も出来る
df_xyz[3, 2] <- 3
# 列番号を省くと,指定行の全体
df_xyz[3,]
# 行番号を省くと,指定列の全体
df_xyz[,2]
##  [1]  0.00000000  0.09983342  3.00000000  0.29552021  0.38941834  0.47942554
##  [7]  0.56464247  0.64421769  0.71735609  0.78332691  0.84147098  0.89120736
## [13]  0.93203909  0.96355819  0.98544973  0.99749499  0.99957360  0.99166481
## [19]  0.97384763  0.94630009  0.90929743  0.86320937  0.80849640  0.74570521
## [25]  0.67546318  0.59847214  0.51550137  0.42737988  0.33498815  0.23924933
## [31]  0.14112001  0.04158066 -0.05837414 -0.15774569 -0.25554110 -0.35078323
## [37] -0.44252044 -0.52983614 -0.61185789 -0.68776616 -0.75680250 -0.81827711
## [43] -0.87157577 -0.91616594 -0.95160207 -0.97753012 -0.99369100 -0.99992326
## [49] -0.99616461 -0.98245261 -0.95892427
# 列は番号の代わりに列名でもアクセスできる
df_xyz[, "y"]
##  [1]  0.00000000  0.09983342  3.00000000  0.29552021  0.38941834  0.47942554
##  [7]  0.56464247  0.64421769  0.71735609  0.78332691  0.84147098  0.89120736
## [13]  0.93203909  0.96355819  0.98544973  0.99749499  0.99957360  0.99166481
## [19]  0.97384763  0.94630009  0.90929743  0.86320937  0.80849640  0.74570521
## [25]  0.67546318  0.59847214  0.51550137  0.42737988  0.33498815  0.23924933
## [31]  0.14112001  0.04158066 -0.05837414 -0.15774569 -0.25554110 -0.35078323
## [37] -0.44252044 -0.52983614 -0.61185789 -0.68776616 -0.75680250 -0.81827711
## [43] -0.87157577 -0.91616594 -0.95160207 -0.97753012 -0.99369100 -0.99992326
## [49] -0.99616461 -0.98245261 -0.95892427
# 列名指定の別の方法
df_xyz$y
##  [1]  0.00000000  0.09983342  3.00000000  0.29552021  0.38941834  0.47942554
##  [7]  0.56464247  0.64421769  0.71735609  0.78332691  0.84147098  0.89120736
## [13]  0.93203909  0.96355819  0.98544973  0.99749499  0.99957360  0.99166481
## [19]  0.97384763  0.94630009  0.90929743  0.86320937  0.80849640  0.74570521
## [25]  0.67546318  0.59847214  0.51550137  0.42737988  0.33498815  0.23924933
## [31]  0.14112001  0.04158066 -0.05837414 -0.15774569 -0.25554110 -0.35078323
## [37] -0.44252044 -0.52983614 -0.61185789 -0.68776616 -0.75680250 -0.81827711
## [43] -0.87157577 -0.91616594 -0.95160207 -0.97753012 -0.99369100 -0.99992326
## [49] -0.99616461 -0.98245261 -0.95892427
# 列をベクトルとして取り出し,組み合わせてプロット
plot(df_xyz$x, df_xyz$y)

# 発展: 別の記法
#plot(y ~ x, data=df_xyz)

レポート課題

以降も上と同様に,Rスクリプト 2025DS_class03.R のコードブロックをチャンクとして追加し, 全ての内容を含む Rmd ファイルを完成させなさい.

完成したら,全体を実行したうえで,結果のhtmlファイルをpreviewで確認.

完成したhtmlファイルを,moodle 第03回の「レポート課題」に提出.

[参考] マークダウン(テキスト部分)の基本

以下の記法をうまく使うことで,きれいに構造化されたHTMLファイルなどを作れます. 実際に Preview で確認してください.

見出しレベル1(大見出し)

見出しレベル2(中見出し)

見出しレベル3(小見出し)

箇条書き(リスト)

  • りんご
  • バナナ
  • みかん

番号付きリスト

  1. 一番目の項目
  2. 二番目の項目
  3. 三番目の項目

強調(太字・斜体)

斜体 または 斜体

太字 または 太字

引用

これは引用です. これも引用です.

区切り線


リンク

Google

数式

ピタゴラスの定理は \(a^2 + b^2 = c^2\) で表されます.

平均値 \(\mu_x\) は次の式で定義されます: \[ \mu_x = \frac{1}{n} \sum_{i=1}^{n} x_i \]

EOF