基本的に、私は次のように言います。
counter <- 3
k <- 9999
Rに次を印刷させたい:
on the 3rd count: 9999
これを行うには、どのコマンドを使用すればよいですか? 私はRにまったく慣れていないので、詳しく説明してください。
基本的に、私は次のように言います。
counter <- 3
k <- 9999
Rに次を印刷させたい:
on the 3rd count: 9999
これを行うには、どのコマンドを使用すればよいですか? 私はRにまったく慣れていないので、詳しく説明してください。
基本的な造りは
paste("on the ", counter, "rd count: ", k, sep="")
数字の正しいサフィックスを選択するには、少し賢くする必要があります (つまり、3 の後の "rd"、4 ~ 9 の後の "th" など)。これを行う関数を次に示します。
suffixSelector <- function(x) {
if (x%%10==1) {
suffixSelector <- "st"
} else if(x%%10==2) {
suffixSelector <- "nd"
} else if(x%%10==3) {
suffixSelector <- "rd"
} else {
suffixSelector <- "th"
}
}
したがって:
suffix <- suffixSelector(counter)
paste("on the ", counter, suffix, " count: ", k, sep="")
デフォルトでは、文字列の間に空白が挿入sep
されるため、引数を設定する必要があります。paste
使用するsprintf
> sprintf("on the %drd count: %d", counter, k)
[1] "on the 3rd count: 9999"
これは、各整数を適切な接尾辞で接続するためのわずかに異なるアプローチです。それを分解すると、すべての整数の序数形式を構築するための構文(?)ルールをキャプチャしていることがわかります。
suffixPicker <- function(x) {
suffix <- c("st", "nd", "rd", rep("th", 17))
suffix[((x-1) %% 10 + 1) + 10*(((x %% 100) %/% 10) == 1)]
}
## Testing with your example
counter <- 3
k <- 9999
paste("on the ", paste0(counter, suffixPicker(counter)),
" count: ", k, sep="")
# [1] "on the 3rd count: 9999"
## Show that it also works for a range of numbers
x <- 1:24
paste0(x, suffixPicker(x))
# [1] "1st" "2nd" "3rd" "4th" "5th" "6th" "7th" "8th" "9th" "10th"
# [11] "11th" "12th" "13th" "14th" "15th" "16th" "17th" "18th" "19th" "20th"
# [21] "21st" "22nd" "23rd" "24th"
説明の1つの注意:10*(((x %% 100) %/% 10) == 1)
10から19で終わる数字(ここでは11、12、および13が実際の悪役です)を選択して、それらをすべてsuffix
含む要素に送信するためにビットが必要です"th"
。