2016-03-16 8 views
8

strtoi(x,base=36) एक पूर्णांक के लिए एक base36 एनकोडेड स्ट्रिंग में परिवर्तित कर देंगे कन्वर्ट:एक पूर्णांक base36 को

strtoi("zzzz",base=36) 
[1] 1679615 

वहाँ एक समारोह है कि इस आपरेशन, जैसे कि, एक सकारात्मक पूर्णांक दी पैदावार base36 बराबर उलट है? अनिवार्य रूप से, मैं एक itostr() समारोह ऐसा है कि

itostr(1679615,base=36) 
[1] "zzzz" 

के लिए देख रहा हूँ (मैं किसी भी 36 से आधार अन्य की जरूरत नहीं है, लेकिन एक base तर्क है करने के लिए अच्छा होगा।)

+0

भी https://github.com/statsmaths/baseN –

+0

डुप्लिकेट नहीं है, लेकिन एक समान प्रश्न पर चर्चा की गई है [यहां।] (Http://stackoverflow.com/questions/23123314/converting-ascii-number-to -स्ट्रिंग्स-इन-आर) – RHertel

उत्तर

6

मेरा मानना ​​है कि आप पैकेज BBmisc इंस्टॉल करते हैं, यह itostr समारोह उपलब्ध है।

library(BBmisc) 
itostr(1679615,base=36) 
[1] "zzzz" 
5

मुझे नहीं पता किसी भी कार्यान्वयन के बारे में पता है, लेकिन एल्गोरिदम मुश्किल नहीं है। यहां एक ऐसा है जो 32-बिट हस्ताक्षरित पूर्णांक पर काम करता है।

intToBase36 <- function(int) { 
    stopifnot(is.integer(int) || int < 0) 

    base36 <- c(as.character(0:9),LETTERS) 
    result <- character(6) 
    i <- 1L 
    while (int > 0) { 
    result[i] <- base36[int %% 36L + 1L] 
    i <- i + 1L 
    int <- int %/% 36L 
    } 
    return(paste(result, sep="", collapse="")) 
} 

यदि आप बड़े पूर्णांकों समर्थन करने की आवश्यकता bit64 और Rmpfr संकुल इस्तेमाल कर सकते हैं।

+0

अच्छा। मैं थोड़ा सा अचंभित था कि यह 'intToBase36 (1679615)' पर टूट गया, लेकिन फिर, निश्चित रूप से 'is.integer (1679615) '' FALSE' है, और 'intToBase36 (1679615L)' का उपयोग करके थोड़ा सहकर्मी चाल है । –

4

एक त्वरित Rcpp हैक of this तो उसी तरह इसे मिल जाएगा:

library(inline) 

cxxfunction(signature(x="numeric"), body=' 
unsigned int val = as<unsigned int>(x); 
static char const base36[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
std::string result; 
result.reserve(14); 
do { 
    result = base36[val % 36] + result; 
} while (val /= 36); 
return wrap(result); 
', plugin="Rcpp") -> base36enc 

base36enc(36) 
## [1] "10" 

base36enc(72) 
## [1] "20" 

base36enc(73) 
## [1] "21" 

यह निश्चित रूप से उत्पादन में इस्तेमाल के लिए थोड़ा और कोड है, हालांकि की जरूरत है।

BBmisc किसी अन्य उत्तर में संदर्भित पैकेज भी C-backed है, इसलिए यह शायद एक अच्छा, प्रदर्शन विकल्प है।

+0

#ty यहोशू। मुझे नहीं पता कि यह कैसे हुआ (और मुझे इसे पकड़ा जाना चाहिए था) – hrbrmstr

+0

यह दिलचस्प लग रहा है, लेकिन ईमानदार होने के लिए, यह मेरे लिए गैर-आरपीपीपी-उपयोगकर्ता के रूप में थोड़ा डरावना है। (मुझे लगता है कि कैनोलिक रिजॉन्डर यह है कि मुझे * एक आरसीपीपी उपयोगकर्ता बनना चाहिए। मुझे समय की कमी है।) इसके अलावा, मुझे क्रिप्टिकल त्रुटियां मिलती हैं जो मेरे जर्मन डिफ़ॉल्ट लोकेल से जुड़ी हो सकती हैं: "शामिल/आरसीपीपी/दिनांक एच: 103 : त्रुटि: फ़ील्ड â € ~ m_tmâ € ™ में अपूर्ण प्रकार है "। –

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