r - 如何匹配 R 中函数参数的多种组合?
问题描述
我们可以创建一个二维数组来匹配两个函数参数的组合吗?
例如,如果我编写一个带有 1 个参数的函数(除了数据输入参数):
choose_procedure <- function(x, what_to_do) {
switch(what_to_do,
"mean" = {...}, # mean(x) or mean(x, na.rm = TRUE) or weighted.mean(x)
"median" = {...}, # median(x)
"square" = {...}, # x * x or x ^ 2
"unique" = {...}, # unique(x)
"log" = {...} # log(x) or log10(x)
)
}
what_to_do
我添加了内联注释以暗示每个输入可能有多个选择。
当what_to_do
=时"mean"
,应该是mean(x, na.rm = TRUE)
还是mean(x, na.rm = FALSE)
?同样,当what_to_do
=时"log"
,应该是log(x)
or log10(x)
?等等。
为了解决这个问题,我想引入另一个参数choose_procedure()
,称为"scenario"
. 所以如果调用choose_procedure()
是:
choose_procedure(x = mtcars$mpg, what_to_do = "log", scenario = "A")
然后它将执行log(mtcars$mpg)
.
但如果电话是
choose_procedure(x = mtcars$mpg, what_to_do = "log", scenario = "B")
然后它将执行log10(mtcars$mpg)
.
一个只包含"log"
并"scenario"
描述 2x2 数组的示例:
"what_to_do"
有 2 个选项:log()
或log10()
"scenario"
有两个选择:"A"
或"B"
choose_procedure()
显然,这可以用 4 个 if 语句(每个组合一个)来处理,但是如果我们有更多的组合(如我打开的示例),将变得非常难以编程。
所以我有两个问题:
- 我正在寻找一种可以扩展到任何n × n数组的设置。
- 事实上,也许有一种方法可以推广到超过n × n?例如,如果我们有 3 个参数:
"what_do_to"
,"scenario"
,"sub_scenario"
. 等等。
解决方案
choose_procedure <- function(x, FUN, ...){
if(...length()) FUN(x, ...)
else FUN(x)
}
x <- c(1,3,5,NA, 10)
choose_procedure(x, mean)
[1] NA
choose_procedure(x, mean, na.rm = TRUE)
[1] 4.75
choose_procedure(x, log)
[1] 0.000000 1.098612 1.609438 NA 2.302585
choose_procedure(x, log10)
[1] 0.0000000 0.4771213 0.6989700 NA 1.0000000
推荐阅读
- c++ - C ++中的C结构零初始化空括号?
- java - 将 ImageViews 设置为按钮背景失败
- php - 在 Laravel html 表上打印数组
- python - InvalidArgumentError:无法挤压昏暗 [2],预期维度为 1,得到 5
- macos - 如何安装 Finder Sync Extension 以使其与 Finder 持久集成?
- postgresql - Postgres 读取已提交不会重新读取更新的行
- awk - 将当前记录的字段与变量内的字段进行比较
- java - Java 使用 Files.move 将文件从一个目录移动到另一个目录
- c - 为什么使用并行处理生成随机数会产生不同的结果,即使它们具有相同的种子?
- mysql - php artisan migrate:fresh --seed 无法将表播种到 MySQL