我有两个带宽函数bandwidth_a()和bandwidth_b()。取决于手头的任务,任何一个都需要应用。我还有其他需要带宽呼叫的功能。
是否可以让我的其他函数调用泛型bandwidth(),并在调用这些函数之前设置bandwidth() <- bandwidth_a()或bandwidth() <- bandwidth_b()?
或者如何才能满足这一要求?
发布于 2021-08-17 11:43:15
您可以通过使用get来做到这一点。
>bandwith_a = function() return('A')
>bandwith_b = function() return('B')
>bandwith = get("bandwith_a")
>bandwith()
[1] "A"
>bandwith = get("bandwith_b")
>bandwith()
[1] "B"还请注意,如果要从一个函数中调用environment,则可能必须指定get。
发布于 2021-08-17 12:14:25
使用match.fun
bandwidth_a <- function() "A"
bandwidth_b <- function() "B"
x <- "a"
bandwidth <- match.fun(paste0("bandwidth_", x))
bandwidth()
# [1] "A"
x <- "b"
bandwidth <- match.fun(paste0("bandwidth_", x))
bandwidth()
# [1] "B"但我更喜欢@催化剂建议的泛型函数
发布于 2021-08-17 11:50:34
我只需要使用一个type参数。
bandwidth <- function(x, type = "a") {
if(type == "a") {
result <- bandwidth_a(x)
}
if(type == "b") {
result <- bandwidth_b(x)
}
result
}如果您的行为取决于输入的类型(class),您还可以定义一个泛型函数,签出高级R-哈德利。
泛型函数定义一个接口,它根据参数的类(几乎总是第一个参数)使用不同的实现。许多基本R函数都是泛型的,包括重要的print()
编辑如果您只想通过命令行运行一个R脚本,另一个类似的解决方案是使用命令行参数,例如:
Rscript example.R –type=a然后将类型作为参数传递给函数。
https://stackoverflow.com/questions/68816584
复制相似问题