如何向R语言的htest对象添加额外的自定义组件?
问题原因
- 字段添加不符合要求且未显式命名:你需要添加的是显著性水平
alpha,但你修改代码时直接向列表传入了level,且没有指定元素的键名,正确的添加写法应为alpha = alpha。 htest类的默认打印逻辑不会输出自定义字段:R内置的print.htest()方法只会输出预设的标准字段(统计量、p值、自由度、置信区间、数据名等),你新增的自定义字段不会出现在控制台打印结果里,但实际上已经存储在返回的列表对象中,你可以通过$运算符提取验证。
验证方法
你可以运行如下代码验证字段已成功存储:
# 调用自定义函数 res <- testvar(c(1,2,3,4,5), c(2,3,4,5,6)) # 提取自定义的alpha字段 res$alpha
完整修改代码
如果需要同时实现存储alpha字段+打印时显示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))) # 记录自由度匹配原生htest打印规范 attr(ts, "parameter") <- c(df1 = df1, df2 = 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))) attr(ts, "parameter") <- c(df1 = df2, df2 = df1) } names(ts) = "F" attr(conf, "conf.level") <- level # 显式添加alpha字段,补全原生htest需要的method字段 output <- list(statistic = ts, p.value = pval, conf.int = conf, data.name = dataname, alpha = alpha, method = "F test to compare two variances") attr(output, "class") <- "htest" # 自定义打印逻辑,新增alpha输出 cat("\n", output$method, "\n\n") cat("data: ", output$data.name, "\n") cat("F = ", round(output$statistic,4), ", df1 = ", attr(output$statistic,"parameter")[1], ", df2 = ", attr(output$statistic,"parameter")[2], ", p-value = ", round(output$p.value,4), "\n") cat("alternative hypothesis: true ratio of variances is not equal to 1\n") cat(attr(output$conf.int,"conf.level")*100," percent confidence interval:\n", sep="") cat(" ", round(output$conf.int[1],4), " ", round(output$conf.int[2],4), "\n") # 新增显著性水平打印 cat("significance level alpha: ", output$alpha, "\n\n") return(invisible(output)) }
内容的提问来源于stack exchange,提问作者feonyte
相关产品推荐
相关产品推荐

