行列の作成
CoddyのRジャーニー「ロジックとフロー」セクションの一部。レッスン 17/64。
行列は行と列に配置されたベクトルで、すべての値が同じ型です。matrix(data, nrow = ...)は、デフォルトでは列ごとに値を埋めます:
m <- matrix(1:6, nrow = 2)
print(m)出力:
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6byrow = TRUE を追加すると、行ごとに埋められます。これは、1 行に 1 つのデータが記述されている形式に対応します。
m <- matrix(1:6, nrow = 2, byrow = TRUE)
print(m)出力:
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6nrow または ncol のいずれかを指定すると、R はデータの長さからもう一方を計算します。
dim(m)は行数と列数を返し、nrow()とncol()はそれぞれ一方だけを返します。matrix(0, nrow = 2, ncol = 3)は、行列を埋めるために単一の値を繰り返します。
m <- matrix(0, nrow = 2, ncol = 3)
print(dim(m))
print(nrow(m) * ncol(m))
print(length(m))出力:
[1] 2 3
[1] 6
[1] 6rbind() はベクトルを行として積み重ね、cbind() は列として積み重ねます。これにより、別々のベクトルから行列を作成できます。
a <- c(1, 2, 3)
b <- c(4, 5, 6)
print(rbind(a, b))
print(dim(cbind(a, b)))出力:
[,1] [,2] [,3]
a 1 2 3
b 4 5 6
[1] 3 2チャレンジ
簡単make_grid(values, n_cols)を完成させてください。valuesを行ごとに格納する、n_cols列の行列を返します。値の数は常にn_colsの倍数です。
提供されたコードは、カンマ区切りの行として値を読み取り、次の行からn_colsを読み取ります。返された行列の各行をそれぞれ独立した行に出力し、その後にサイズをrows x columnsとして出力します。
自分で試してみよう
make_grid <- function(values, n_cols) {
# ここにコードを書いてください
matrix(values)
}
# 提供された入力/出力コード: そのままにしておいてください
input <- suppressWarnings(readLines(file("stdin")))
values <- as.numeric(strsplit(input[1], ",")[[1]])
m <- make_grid(values, as.numeric(input[2]))
for (i in seq_len(nrow(m))) cat(m[i, ], "\n")
cat(nrow(m), "x", ncol(m), "\n")
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
ロジックとフローのすべてのレッスン
自分で練習してみよう: Rオンラインコンパイラ