2012-10-23 12 views
7

असल में, मैं निम्नलिखित है कहते हैं:मैं स्ट्रिंग को कैसे जोड़ूं और आर में किसी फ़ंक्शन से आउटपुट का मूल्यांकन कैसे करूं?

on the 3rd count: 9999 

किसी को क्या आदेश का उपयोग करना चाहिए यह करने के लिए करता है:

counter <- 3 
k <- 9999 

मैं आर मुद्रित करने के लिए प्राप्त करने के लिए निम्नलिखित चाहते हैं? कृपया इसे मेरे लिए वर्तनी बाहर, के रूप में मैं पूरी तरह से आर

लिए नया हूँ

उत्तर

12

बुनियादी निर्माण

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

आप अंकों के लिए सही प्रत्यय चयन करने के लिए एक छोटे से चालाक होना पड़ेगा (यानी कि "

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

}

इस प्रकार:

"3 के ​​बाद," वां 4-9 के बाद वें ", आदि यहाँ यह करने के लिए एक समारोह है

आपको sep तर्क सेट करने की आवश्यकता है क्योंकि डिफ़ॉल्ट रूप से paste तारों के बीच एक खाली स्थान डालता है।

+0

अच्छा 'प्रत्यय चयनकर्ता' +1 –

+0

उदाहरण के लिए 13 के साथ बहुत अच्छा काम नहीं करता है ... ऐसा लगता है कि यह थोड़ा अधिक जटिल है! (साथ ही, आपको यह सुनिश्चित करना होगा कि आपका पोस्ट कोड वास्तव में चुने गए 'प्रत्यय चयनकर्ता' को वापस कर देगा!) –

+0

पेस्ट फ़ंक्शन को लूप में रखा जा सकता है? क्योंकि मुझे नहीं पता कि क्यों पेस्ट चीज़ लूप में है जब कुछ भी मुद्रित नहीं होता ??? – user1769197

1

उपयोग sprintf

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

यहाँ प्रत्येक पूर्णांक ऊपर hooking के लिए यह उचित प्रत्यय के साथ एक अलग तरीका है। यदि आप इसे अलग करते हैं, तो आप देखेंगे कि यह प्रत्येक पूर्णांक के क्रमिक रूप को बनाने के लिए वाक्य रचनात्मक (?) नियम को कैप्चर करता है।

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" 

एक व्याख्यात्मक टिप्पणी: 10*(((x %% 100) %/% 10) == 1) बिट 10 से 19 में समाप्त होने वाले नंबरों उठा लेने के लिए सभी "th" युक्त suffix के तत्वों को भेजने की जरूरत है (11, 12, और 13 यहाँ असली बुरा अभिनेता हैं)।

संबंधित मुद्दे

 संबंधित मुद्दे