文字の反復処理 (strsplit)
CoddyのRジャーニー「基礎」セクションの一部 — レッスン 65/78。
文字列内の各文字を個別に処理する必要がある場合はどうすればよいでしょうか?ベクトルとは異なり、Rでは文字列の文字を直接ループで処理することはできません。strsplit() 関数は、文字列を文字のベクトルに分割することで、この問題を解決します。
strsplit()関数は、分割する文字列とセパレータ(区切り文字)の2つの引数を取ります。個々の文字に分割するには、空の文字列""をセパレータとして使用します:
word <- "hello"
chars <- strsplit(word, "")[[1]]
print(chars)出力:
[1] "h" "e" "l" "l" "o"最後に [[1]] があることに注目してください。これは strsplit() がリストを返すためであり、文字ベクトルを取得するために最初の要素を抽出する必要があるからです。文字をベクトルとして取得したら、すでに学んだ手法を使ってそれらを反復処理できます:
word <- "R"
chars <- strsplit(word, "")[[1]]
for (char in chars) {
print(char)
}出力:
[1] "R"この手法は、特定の文字をカウントしたり、文字列を反転させたり、入力を1文字ずつ検証したりするようなタスクに不可欠です。
チャレンジ
簡単単語(例:programming)を含む1行の入力を受け取ります。
strsplit() を使用して文字列を個々の文字に分割し、以下の手順を実行してください:
- 入力された単語を文字のベクトルに分割します
- ベクトルの各文字をループで処理します
- 文字
"a"がその単語の中に何回現れるかをカウントします(大文字と小文字を区別します) print()を使用して、各文字をそれぞれの行に出力します- ループの終了後、
cat()を使用してCount of 'a': Xの形式(その後に改行を含む)でカウントを出力します
例えば、入力が以下の場合:
banana出力は以下のようになります:
[1] "b"
[1] "a"
[1] "n"
[1] "a"
[1] "n"
[1] "a"
Count of 'a': 3説明:単語 "banana" は文字 c("b", "a", "n", "a", "n", "a") に分割されます。各文字が出力され、文字 "a" は3回現れます。
自分で試してみよう
# 入力を読み込む
con <- file("stdin", "r")
word <- suppressWarnings(readLines(con, n = 1))
# 文字 'a' のカウンターを初期化する
count_a <- 0
# TODO: 以下にコードを記述してください
# 1. strsplit() を使用して、単語を個々の文字に分割する
# 2. 各文字をループで処理する
# 3. print() を使用して各文字を出力する
# 4. 'a' が何回現れるかカウントする
# 'a' のカウントを出力する
cat("Count of 'a': ", count_a, "\n", sep = "")このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。