如何向 htest 对象添加其他组件

Posted

技术标签:

【中文标题】如何向 htest 对象添加其他组件【英文标题】:How to add additional components to htest object 【发布时间】:2022-01-11 23:44:21 【问题描述】:

我正在尝试编写与 var.test() 非常相似的自己的函数。我希望我的输出看起来类似于 var.test() 的输出,并且似乎 var.test() 将输出列表分配给类 htest。我想做类似的事情,但在输出列表中添加一个附加组件,即级别 alpha。

testvar <- function(x1, x2, level = 0.95) 
  df1 <- length(x1) - 1
  df2 <- length(x2) - 1
  alpha = 1 - level
  s1 <- var(x1)
  s2 <- var(x2)
  dataname <- paste(deparse(substitute(x1)), "and", deparse(substitute(x2)))
  if(s1 > s2) 
    ts = s1/s2
    pval = 2 * (1 - pf(ts, df1, df2))
    conf = c(s1/(s2*qf(1-alpha/2, df1, df2)), s1/(s2*qf(alpha/2, df1,df2)))
  
  else if(s2 >= s1) 
    ts = s2/s1
    pval = 2 * (1 - pf(ts, df2, df1))
    conf = c(s2/(s1*qf(1-alpha/2, df2, df1)), s2/(s1*qf(alpha/2, df2,df1)))
  
  
  names(ts) = "F"
  attr(conf, "conf.level") <- level
  output <- list(statistic = ts, p.value = pval, conf.int = conf, data.name = dataname)
  attr(output, "class") <- "htest"
  return(output)

如果我尝试将变量 alpha 添加到我的输出中,则函数返回的输出没有任何差异。所以,例如

output <- list(statistic = ts, p.value = pval, conf.int = conf, data.name = dataname, level)

【问题讨论】:

【参考方案1】:

"htest" 类对象的 print 方法不会打印 conf.int 的属性,但它存在:

set.seed(2021)
x <- rnorm(100)
y <- rnorm(100)
ht <- testvar(x, y)
attributes(ht$conf.int)
#$conf.level
#[1] 0.95

如果对象返回子类类"htest" 并且编写了该自定义类的方法,则可以自动打印。 在测试函数中将类归属指令改写为

attr(output, "class") <- c("feonyte", "htest")

或使用另一个类名。然后,编写一个print.feonyte 方法。

print.feonyte <- function(x, ...)
  NextMethod(x, ...)
  alpha <- attr(x$conf.int, "conf.level")
  cat("confidence level:", alpha, "\n\n")
  invisible(NULL)


ht

另外,返回值没有methodalternativeparameter成员。

【讨论】:

以上是关于如何向 htest 对象添加其他组件的主要内容,如果未能解决你的问题,请参考以下文章

微信小程序之组件

如何向 NgZorro Collapse 标题组件添加关闭按钮?

如何向 NetBeans 添加新的 Java 组件?

如何使用 Typescript 向样式化组件添加属性?

在 Joomla 3 中向组件添加类别

我应该在 Delphi 而不是 C++ Builder 中编写组件吗?如何向组件添加事件?