में लूप के बिना एक परिभाषित स्ट्रिंग सूची के साथ गैर-असीसी वर्णों को बदलें, मैं अपने एसीआई समकक्ष द्वारा गैर-असीसी वर्ण (अभी के लिए, केवल स्पेनिश) को प्रतिस्थापित करना चाहता हूं। अगर मेरे पास "ए" है, तो मैं इसे "ए" के साथ बदलना चाहता हूं।आर
मैंने इस फ़ंक्शन को बनाया (ठीक काम करता है), लेकिन मैं एक लूप (सैपली जैसे आंतरिक लूप सहित) का उपयोग नहीं करना चाहता हूं।
latin2ascii<-function(x) {
if(!is.character(x)) stop ("input must be a character object")
require(stringr)
mapL<-c("á","é","í","ó","ú","Á","É","Í","Ó","Ú","ñ","Ñ","ü","Ü")
mapA<-c("a","e","i","o","u","A","E","I","O","U","n","N","u","U")
for(y in 1:length(mapL)) {
x<-str_replace_all(x,mapL[y],mapA[y])
}
x
}
क्या इसे हल करने का एक शानदार तरीका है?
library(gsubfn)
# Create a named list, in which:
# - the names are the strings to be looked up
# - the values are the replacement strings
mapL <- c("á","é","í","ó","ú","Á","É","Í","Ó","Ú","ñ","Ñ","ü","Ü")
mapA <- c("a","e","i","o","u","A","E","I","O","U","n","N","u","U")
# ll <- setNames(as.list(mapA), mapL) # An alternative to the 2 lines below
ll <- as.list(mapA)
names(ll) <- mapL
# Try it out
string <- "ÍÓáÚ"
gsubfn("[áéíóúÁÉÍÓÚñÑüÜ]", ll, string)
# [1] "IOaU"
संपादित करें::
जी Grothendieck बताते हैं कि किसी भी मदद, सुझाव या संशोधन एक ही नाम के पैकेज में
धन्यवाद! अच्छी तरह से काम। केवल एक प्रश्न (बस जानने के लिए); क्या आप जानते हैं कि gsubfn फ़ंक्शन किसी भी प्रकार के आंतरिक लूप का उपयोग करता है या नहीं? तेजी से तेज होना चाहिए? –
@ अलवारो - मुझे नहीं लगता कि 'gsubfn()' विशेष रूप से तेज़ है - 'बस' सुविधाजनक और सुरुचिपूर्ण। –
आर के आधार पर 'चार्टर' भी देखें जो कि समस्या के लिए ठीक लगता है, हालांकि वास्तविक समस्या में भिन्नताएं हैं जैसे कि दो वर्ण अनुक्रमों को प्रतिस्थापित करना, फिर 'gsubfn' अभी भी इसे संभाल सकता है लेकिन 'chartr' नहीं। –