【问题标题】:When I try to print using cat, it gives me back NULL in the very end当我尝试使用 cat 打印时,它最后给了我 NULL
【发布时间】:2016-04-19 03:24:58
【问题描述】:
counts <- c(18,17,15,20,10,20,25,13,12)
outcome <- gl(3,1,9)
treatment <- gl(3,3)

model1 <- glm(counts ~ outcome + treatment, family = poisson())
model2 <- glm(counts ~ outcome, family = poisson())

print_params <- function(model){
  cat("\nAIC:", model$aic,
      "\nDeviance:", model$deviance)}

list_models <- list(model1,model2)
do.call("rbind", sapply(list_models, print_params, simplify = FALSE))

这给了我:

AIC: 56.76132 
Deviance: 5.129141
AIC: 52.76132 
Deviance: 5.129141NULL

我不确定我为什么会得到这个。还有其他方法吗?

【问题讨论】:

  • print_params 返回NULLrbind 的结果有什么意义呢?

标签: r cat side-effects


【解决方案1】:

print_params 返回NULLcat 是一个副作用),所以如果你查看你的*apply 的结果,你有cat 的结果,然后是两个NULL 的列表s。 do.call 然后返回你的函数的结果,然后是rbinding 两个NULLs 的结果,即一个NULL

为了捕捉副作用,稍微简化你的语法:

do.call("cat", lapply(list_models, print_params))

给予

AIC: 56.76132 
Deviance: 5.129141
AIC: 52.76132 
Deviance: 5.129141

【讨论】:

  • 另外,如果您将print_params 中的cat 更改为pastelapply 的结果将更有意义,因为它将是一些内容的列表。不过,您仍然需要cat 来打印\n 字符,即do.call 与我的答案相同;它所做的更有意义。
【解决方案2】:

NULL 来自命令行,评估您输入的内容。link 谈到它(Spacedman 的回复)。

他们建议您使用 invisible() 包装函数。这对我有用:

invisible(do.call("rbind", sapply(list_models, print_params, simplify = FALSE)))

AIC: 56.76132 
Deviance: 5.129141 

AIC: 52.76132 
Deviance: 5.129141

【讨论】:

    猜你喜欢
    • 2015-05-14
    • 1970-01-01
    • 1970-01-01
    • 2020-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-28
    • 2021-03-05
    相关资源
    最近更新 更多