4

R の gsub2 関数で遊んでみたR: gsub を使って文字を置き換える、関数を作成するにはどうすればよいですか? 暗号文を作成するには:

from<-c('s','l','k','u','m','i','x','j','o','p','n','q','b','v','w','z','f','y','t','g','h','a','e','d','c','r')
  to<-c('z','e','b','r','a','s','c','d','f','g','h','i','j','k','l','m','n','o','p','q','t','u','v','w','x','y')

例えば:

原文: ザ・フーズ 1973

暗号文: ptv ltn'm 1973

問題は、gsub2 がいくつかの文字を 2 回 (o->f->n および s->z->n) 置換することです。これにより、暗号文が台無しになり、デコードがほとんど不可能になります。誰かが私が犯している間違いを指摘できますか? ありがとう!

4

2 に答える 2

7

1 つの方法は、名前付きベクトルをエンコーディング暗号として使用することです。このような名前付きベクトルを作成する簡単な方法は、次を使用することsetNamesです。

cipher <- setNames(to, from)
cipher
  s   l   k   u   m   i   x   j   o   p   n   q   b   v   w   z   f   y   t   g   h   a   e   d   c   r 
"z" "e" "b" "r" "a" "s" "c" "d" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "t" "u" "v" "w" "x" "y" 

strsplitエンコーディング関数には、とを使用できますpaste

encode <- function(x){
  splitx <- strsplit(x, "")[[1]]
  xx <- cipher[splitx]
  xx[is.na(xx)] <- splitx[is.na(xx)]
  paste(xx, collapse="")
}

encode("the who's 1973")
[1] "ptv ltf'z 1973"
于 2012-11-22T00:06:36.430 に答える
6

chartr引用した質問に対する(人気のある:12アップ)回答で言及されているように使用することもできます:

cipher <- function(x) 
    chartr( "slkumixjopnqbvwzfytghaedcr", "zebrascdfghijklmnopqtuvwxy", x )
于 2012-11-22T00:52:24.897 に答える