在R中连接两个功能

时间:2017-03-14 20:17:13

标签: r function

问题:

假设我有一个名为Hy的函数(见下面的R代码)。如果我想让Hy函数中的3个对象成为By函数的输入,我该怎么办?

注意:这些函数不应该成为闭包函数(即将HyBy合并到一个函数中),而不是Hy和{ {1}}功能必须保持“分开。”

详细信息:

By

现在Hy <- function(n){ A <- rnorm(n) B <- rcauchy(n) invisible( list(A = A, B = B, n = n) ) ## Making all elements & arguments recognizeable # outside the function "Hy". } Hy(2) 函数需要By函数中的“A”,“B”和“n”才能工作:

Hy

2 个答案:

答案 0 :(得分:2)

最直接的方法是分配Hy的结果并将其传递给By

hy_res = Hy(n)
by_res = By(A = hy_res$A, B = hy_res$B, n = hy_res$n)

# or use with() for a little less typing
by_res = with(hy_res, By(A, B, n))

由于参数位于列表中,您还可以使用do.call调用list中提供的一组参数的函数:

by_res = do.call(what = By, args = Hy(n))

请注意,R 中的函数不能返回多个参数,因此您可能应该将By的最后一行重写为return(list(C, D, E))

答案 1 :(得分:1)

如果您想在全局环境中更新AB,请使用<<-作为Hy函数内的赋值运算符。

Hy <- function(n){

  A <- rnorm(n)
  B <- rcauchy(n)

  invisible( list(A = A, B = B, n = n) ) ## Making all elements & arguments recognizeable 
  # outside the function "Hy".
}

By <- function(A, B, n){

  C = A + 1 
  D = B + 1
  E = n + 1

  return( list( C , D, E ) )
}

Hy_vals <- Hy(1)
By(A = Hy_vals$A, B = Hy_vals$B, n = Hy_vals$n)
# C        D        E 
# 2.718926 1.586720 2.000000