首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >智能需求搜索

智能需求搜索
EN

Stack Overflow用户
提问于 2016-07-31 04:35:39
回答 1查看 67关注 0票数 0

假设我有很多顺序函数。每个函数的结果用于序列中的下一个函数。

代码语言:javascript
复制
start <- "somevar"
a <- fun_a(start)
b <- fun_b(a)
c <- fun_c(b)
d <- fun_d(c)
e <- fun_e(d)
f <- fun_f(e)

另一种看待这一问题的方法是:

代码语言:javascript
复制
start %>% fun_a %>% fun_b %>% fun_c %>% fun_d %>% fun_e %>% fun_f

我想要做的是在传递"d“时了解一些动态内容,例如,它应该运行fun_efun_f

对于这种类型的编程,R有一些功能吗?

如果你知道如何从计算机科学家的角度来看待这个概念的话,你就会得到额外的分数。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-31 10:30:42

您不能通过对象名称来改变函数的行为(至少以自然的方式)。但是可以根据对象类指定函数行为。这是一个叫做函数重载的概念。我觉得这很接近你想要做的事。

在R中,您可以通过泛型函数来实现这一点(请参阅哈德利高级R)。

下面是一个简单的例子。MuFunc的行为改变了传递对象所属的类。它还使用递归结构,以便函数调用另一个函数,如您的示例所示。

代码语言:javascript
复制
MyFunc <- function(x, ...) {
  UseMethod("MyFunc")
}

MyFunc.default <- function(x, ...) {
  print("running MyFunc.default")
  class(x) <- c("A", class(x))
  MyFunc(x)
}

MyFunc.A <- function(x, ...) {
  print("running MyFunc.A")
  class(x) <- c("B", class(x))
  MyFunc(x)
}

MyFunc.B <- function(x, ...) {
  print("running MyFunc.B")
  class(x) <- c("C", class(x))
  MyFunc(x)
}

MyFunc.C <- function(x, ...) {
  print("running MyFunc.C (Terminal Function)")
  class(x) <- c("D", class(x))
}

MyFunc(1)
##[1] "running MyFunc.default"
##[1] "running MyFunc.A"
##[1] "running MyFunc.B"
##[1] "running MyFunc.C (Terminal Function)"

x <- 1
class(x) <- "B"
MyFunc(x) 
##[1] "running MyFunc.B"
##[1] "running MyFunc.C (Terminal Function)"
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38680771

复制
相关文章

相似问题

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