2012-10-23 27 views

Trả lời

12

Việc xây dựng cơ bản là

paste("on the ", counter, "rd count: ", k, sep="") 

Bạn sẽ phải có một chút khéo léo để chọn hậu tố phù hợp với các chữ số (ví dụ " thứ" sau 3, "th" sau 4-9, vv đây là một chức năng để làm điều đó:

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" 
    } 

}

Như vậy:

suffix <- suffixSelector(counter) 
paste("on the ", counter, suffix, " count: ", k, sep="") 

Bạn cần đặt đối số sep vì theo mặc định paste chèn khoảng trống vào giữa các chuỗi.

+0

nice 'suffixSelector' +1 –

+0

Không hoạt động tốt với 13, ví dụ ... Điều này có vẻ phức tạp hơn một chút! (Ngoài ra, bạn cần chắc chắn rằng mã đã đăng của bạn thực sự trả về 'suffixSelector' đã chọn!) –

+0

có thể đặt chức năng dán vào vòng lặp while không? Bởi vì tôi không biết tại sao không có gì được in ra khi thingy dán là trong vòng lặp while ??? – user1769197

1

Sử dụng sprintf

> sprintf("on the %drd count: %d", counter, k) 
[1] "on the 3rd count: 9999" 
2

Dưới đây là một cách tiếp cận hơi khác nhau để nối mỗi số nguyên lên với nó là hậu tố thích hợp. Nếu bạn tách nó ra, bạn sẽ thấy rằng nó nắm bắt quy tắc cú pháp (?) Để xây dựng dạng thứ tự của mỗi số nguyên.

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" 

Một giải thích lưu ý: Các bit 10*(((x %% 100) %/% 10) == 1) là cần thiết để chọn ra con số kết thúc bằng 10-19 (11, 12 và 13 là những diễn viên thật xấu ở đây) gửi tất cả các yếu tố của suffix chứa "th".

Các vấn đề liên quan