创建一个 R 函数,将其他预定义函数动态地顺序应用到初始输入变量

问题描述 投票:0回答:1

我有一组非常简单的函数,它接受输入字符变量(单词或短语)并返回一个新变量。基本上, 这些函数中的每一个都对输入单词执行不同的加密。

由于这些函数的输入和输出都是字符变量, 一个函数的输出可以用作另一个函数的输入,这样 可以应用多个顺序密码。例如:

#install.packages("ciphertext")
library(ciphertext)

first_output <- ciphertext::caesar("hello"); first_output

[1] "ifmmp"

ciphertext::atbash(first_output)

[1] "runnk"

我想知道 R 中是否有可能创建一个函数(我在下面将其命名为

combinef
),该函数接受输入初始字符变量(在我的示例中为“hello”)并按顺序应用作为附加参数列出的其他函数.

所以算法会是这样的:

  1. 取首字母(“你好”)
  2. 将第一个列出的函数应用于初始单词并获得一个新单词
  3. 使用新单词重复步骤 1,直到使用列出的所有参数

我希望它如何工作,以及预期的最终输出:

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")
结构, 但当潜在的加密方法数量增加时,这就变得不切实际了。

任何帮助或建议将不胜感激!

r function custom-function
1个回答
0
投票

我很确定某些包已经实现了类似的东西,但你可以编写一个递归函数:

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"
© www.soinside.com 2019 - 2024. All rights reserved.