我一直在玩R的gsub2函数R: replace characters using gsub, how to create a function?来创建一个密文:
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年
ciphertext:ptv ltn'm 1973
问题是,gsub2替换了一些字母两次,(o-&gt; f-&gt; n和s-&gt; z-&gt; n),这会弄乱我的密文并使其几乎不可能解码。谁能指出我正在犯的错误?谢谢!
答案 0 :(得分:7)
一种方法是使用命名向量作为编码密码。创建这样一个命名向量的简单方法是使用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"
答案 1 :(得分:6)
您还可以使用chartr
,如您所引用的问题(受欢迎的:12个)回答: