在R中隐藏函数的结果

Car*_*vid 7 r

我创建了一个具有四个输出参数的函数,例如:

myfuction<-function(...){     
    #Inside the function I created four results A, B, C, and D.    
    A = ...    
    B = ...    
    C = ...    
    D = ...     
    z<-list(MacKinnon=A,regression=B,proof=C, res=D)    
    return(z)
}
Run Code Online (Sandbox Code Playgroud)

结果D对应于表示回归残差的数字向量.

我的问题是如何在不删除它的情况下隐藏此结果?也就是说,我希望当我运行该函数时,结果A,B和C出现,但不是结果D.

如果我想访问结果D,我必须做这样的事情:

X <-myfuction (...)
X$res
Run Code Online (Sandbox Code Playgroud)

能够观察残留物.

csg*_*pie 9

我只想使用S3类.基本上,只需z使用特定类标记对象

myfunction <- function(){     
  #Inside the function I created four results A, B, C, and D.    
  A = 10;B = 20;C = 30; D = 40     
  z = list(MacKinnon=A, regression=B, proof=C, res=D)    
  class(z) = "my_fun" # Tagging here
  return(z)
}
Run Code Online (Sandbox Code Playgroud)

为.创建S3打印功能 my_fun

print.my_fun = function(x, ...) print(x[1:3])
Run Code Online (Sandbox Code Playgroud)

然后

R> x = myfunction()
R> x
$MacKinnon
[1] 10

$regression
[1] 20

$proof
[1] 30
Run Code Online (Sandbox Code Playgroud)

R> x$res
[1] 40
Run Code Online (Sandbox Code Playgroud)

给你想要你想要的.


几条评论/指针.

  • 通常在分配类时,您会使用类似的东西

    class(z) = c("my_fun", class(z))
    
    Run Code Online (Sandbox Code Playgroud)

    但是,由于我们刚刚z在上面的行中创建,因此不需要这样做.

  • 目前,该print方法剥离了任何其他类(在该示例中,只有一个类,因此它不是问题).如果我们想维护多个类,我们会使用

    print.my_fun = function(x, ...) {
      x = structure(x[1:3], class = class(x)) 
      NextMethod("print")
    }
    
    Run Code Online (Sandbox Code Playgroud)

    函数子集的第一行x,但维护所有其他类.第二行,然后传递x给下一个print.class_name函数.