如何在R函数中重用代码?

如何在R函数中重用代码?,r,function,code-duplication,R,Function,Code Duplication,我有一个代码块,我想在一个函数中多次使用它(我们称它为myFunction)。我自然希望避免重复这段代码,但除了每次都将其放入外部文件并进行外包之外,我找不到重用它的方法 我尝试的第一件事是将重复的代码放在一个没有参数的内部迷你函数中(我们称之为internalFunction。这意味着我可以根据需要调用internalFunction;但是,这掩盖了internalFunction从myFunction的主环境输出的对象 然后我尝试使用我想您想要的是一种简单的方法,可以将多个值返回到调用函数,

我有一个代码块,我想在一个函数中多次使用它(我们称它为
myFunction
)。我自然希望避免重复这段代码,但除了每次都将其放入外部文件并进行外包之外,我找不到重用它的方法

我尝试的第一件事是将重复的代码放在一个没有参数的内部迷你函数中(我们称之为
internalFunction
。这意味着我可以根据需要调用
internalFunction
;但是,这掩盖了
internalFunction
myFunction
的主环境输出的对象


然后我尝试使用
我想您想要的是一种简单的方法,可以将多个值返回到调用函数,这可以通过一个列表来完成,如下所示:

maxmin <- function(i1,i2){

  if (i1>i2){
    mx <- i1
    mn <- i2
  }  else
  {
    mn <- i1
    mx <- i2
  }
  rv <- list(min=mn,max=mx)
  return(rv)
}

r1 <- maxmin(3,4)
r2 <- maxmin(6,5)

print(sprintf("minimums %d %d",r1$min,r2$min))
print(sprintf("maximums %d %d",r1$max,r2$max))
maxmin i2){

mx这里是另一种方法,但它感觉很棘手,在大多数情况下可能不是一个好的软件工程解决方案。基本上,您可以明确地访问父环境中的变量

fun1 <- function(x)
{
    maxminenv <- function(i1,i2){
      if (i1>i2){
        mx <- i1
        mn <- i2
      }  else
      {
        mn <- i1
        mx <- i2
      }
      penv <- parent.frame()
      penv$min <- mn
      penv$max <- mx
    }
    maxminenv(3,4)
    print(sprintf("min:%d max:%d",min,max))
}
fun1()

fun1我不清楚为什么不能将internalFunction创建的对象作为返回值返回给myFunction。如果您在一个小示例中发布了您尝试过的代码,我可能会明白您的意思。这会起作用,但我宁愿不将它们作为列表返回,最好是多个单独的对象。AFAIK,R只能返回一个对象,因此您必须以某种方式将它们打包。我认为这是R的基本原则。如果您喜欢OO编程,您也可以将它们打包为S4对象,但大多数人只会使用列表。这对您有用吗?这很有用,但有点令人失望。是否可以在su中指定internalFunction对象它们在myFunction中可见,但在全局R环境中不可见?谢谢,这是一个非常有用的资源。