2011-01-20 52 views
4

我想要一個函數,當傳遞一個只包含字母的字符串時,通過X字符在字符串中旋轉字符串中的每個字母,其中X是該函數的一個參數。這樣做的著名實例是當X = 13,這是所謂ROT-13在R中實現ROT-13

功能< - 型ROTX(STR中,x){ ?? }

這是一種我期望R嚮導可以在幾行內完成的事情,而我最終會有10個或更多。

回答

3
rotX <- function(ch,x) 
{ #rotate each letter of a string ch by x letters thru the alphabet, as long as x<=13 
    old <- paste(letters, LETTERS, collapse="", sep="") 
    new <- paste(substr(old, 2*x+1, 26*2), substr(old, 1, 26), sep="") 
    chartr(old, new, ch) 
} 

這兩個固定的我在註釋中提到的問題。

6

?chartr(例如部分):

rot <- function(ch, k = 13) { 
    p0 <- function(...) paste(c(...), collapse="") 
    A <- c(letters, LETTERS, " '") 
    I <- seq_len(k) 
    chartr(p0(A), p0(c(A[-I], A[I])), ch) 
} 

或這裏http://rosettacode.org/wiki/Rot-13#R

rot13 <- function(x) 
{ 
    old <- paste(letters, LETTERS, collapse="", sep="") 
    new <- paste(substr(old, 27, 52), substr(old, 1, 26), sep="") 
    chartr(old, new, x) 
} 
+0

謝謝,這是偉大的 - 除了腐爛('N')產生'' - 空白,當它應該產生'A'。對我來說,這看起來像是一個在charter幫助中的錯誤,在那裏你得到了這個功能 - 假設他們確實打算實現真正的ROT-13。這可以通過省略A定義中的第三個字符串來解決,所以第三行代替A < - c(letter,LETTERS)雖然它與標準ROT-13有所不同,有時將大寫字母變成小寫字母,反之亦然 – 2011-01-20 10:16:43