我有一组非常简单的函数,它接受输入字符变量(单词或短语)并返回一个新变量。基本上, 这些函数中的每一个都对输入单词执行不同的加密。
由于这些函数的输入和输出都是字符变量, 一个函数的输出可以用作另一个函数的输入,这样 可以应用多个顺序密码。例如:
#install.packages("ciphertext")
library(ciphertext)
first_output <- ciphertext::caesar("hello"); first_output
[1] "ifmmp"
ciphertext::atbash(first_output)
[1] "runnk"
我想知道 R 中是否有可能创建一个函数(我在下面将其命名为
combinef
),该函数接受输入初始字符变量(在我的示例中为“hello”)并按顺序应用作为附加参数列出的其他函数.
所以算法会是这样的:
我希望它如何工作,以及预期的最终输出:
combinef("hello", caesar, atbash) #apply caesar function to "hello", and then atbash
[1] "runnk"
combinef("hello", caesar, atbash, polybius) #apply polybius after the atbash
"42 45 33 33 25"
我创建这样一个函数的所有尝试都非常冗长,因为我试图利用
if (argument2 == "function_name")
结构,
但当潜在的加密方法数量增加时,这就变得不切实际了。
任何帮助或建议将不胜感激!
我很确定某些包已经实现了类似的东西,但你可以编写一个递归函数:
foo <- function(x) paste(x, "foo")
bar <- function(x) paste(x, "bar")
baz <- function(x) paste(x, "baz")
caller <- function(x, funcs) {
res <- funcs[[1]](x)
if (length(funcs) > 1) res <- caller(res, funcs[-1])
res
}
caller("hello", list(foo, bar, baz))
#[1] "hello foo bar baz"