首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为R中定义的函数分配新名称

为R中定义的函数分配新名称
EN

Stack Overflow用户
提问于 2021-08-17 11:32:19
回答 3查看 65关注 0票数 0

我有两个带宽函数bandwidth_a()bandwidth_b()。取决于手头的任务,任何一个都需要应用。我还有其他需要带宽呼叫的功能。

是否可以让我的其他函数调用泛型bandwidth(),并在调用这些函数之前设置bandwidth() <- bandwidth_a()bandwidth() <- bandwidth_b()

或者如何才能满足这一要求?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-08-17 11:43:15

您可以通过使用get来做到这一点。

代码语言:javascript
复制
>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

票数 1
EN

Stack Overflow用户

发布于 2021-08-17 12:14:25

使用match.fun

代码语言:javascript
复制
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"

但我更喜欢@催化剂建议的泛型函数

票数 2
EN

Stack Overflow用户

发布于 2021-08-17 11:50:34

我只需要使用一个type参数。

代码语言:javascript
复制
    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脚本,另一个类似的解决方案是使用命令行参数,例如:

代码语言:javascript
复制
Rscript example.R –type=a

然后将类型作为参数传递给函数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68816584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档