R 为什么函数不显示它应该显示的内容?

R 为什么函数不显示它应该显示的内容?,r,display,R,Display,我在R中有以下代码,但我在输出中有问题,它应该显示不同的内容。这就是我们所展示的 Summary(x, y) The total square sum is: 17.5The error square sum is: 0 [[1]] NULL [[2]] [1] "\n" [[3]] NULL 它本该展示的 The total square sum is: number1 The error square sum is: number2 你能检查一下吗 (这是一个示例,实际上我必须

我在R中有以下代码,但我在输出中有问题,它应该显示不同的内容。这就是我们所展示的

Summary(x, y)

The total square sum is: 17.5The error square sum is: 0 
[[1]]
NULL

[[2]]
[1] "\n"

[[3]]
NULL
它本该展示的

The total square sum is: number1

The error square sum is: number2
你能检查一下吗

(这是一个示例,实际上我必须显示更多内容
标准错误是:数字3,方差是数字4,等等…

Summary
list()
从对象创建列表,但是
cat()
不返回对象,它只是打印到控制台。这就是为什么列表元素中有两个显示为
NULL
(它们是空的,而其中一个包含字符串
“\n”
(实际对象)

使用更复杂的格式打印文本可能很困难,而且不直观,但我发现在现有的R代码中可以找到很多灵感和帮助

print.lm()
为例,它是负责使用
lm()
显示线性回归结果的函数

运行
stats:::print.lm
,您将看到:

function (x, digits = max(3L, getOption("digits") - 3L), ...) 
{
    cat("\nCall:\n", paste(deparse(x$call), sep = "\n", collapse = "\n"), 
        "\n\n", sep = "")
    if (length(coef(x))) {
        cat("Coefficients:\n")
        print.default(format(coef(x), digits = digits), print.gap = 2L, 
            quote = FALSE)
    }
    else cat("No coefficients\n")
    cat("\n")
    invisible(x)
}
看起来有点忙,但还不算太糟。您将看到对
cat()
的每次调用都包含一个或多个字符串和分隔符(如
\n
\t
用于新行和表格),并按顺序排列,最后指定了分隔符
sep
。有时还有
粘贴()
cat()
内部调用,在这种情况下
粘贴()
只是为
cat()
打印“准备”一些字符。我们还注意到,有几个调用
cat()
print()
,混合和匹配完成,没有问题。最后是
不可见()
如MrFlick在注释中所述。此命令确保函数不会打印其参数(在本例中为
x
),但您仍可以将其分配给变量

有了这些见解,我们能否改进
Summary()


Summary您传递给函数(x,y)的参数是什么?@Chabo
xYou不能“列出”一个“cat”。
cat()
是一个具有副作用的函数。它会立即打印到屏幕上。它返回NULL,这就是为什么在打印列表时会看到它。@MrFlick的建议是:
MrFlick删除了这些标记,因为虽然您的代码可能用于处理统计数据,但您的问题与这些统计概念无关。例如,没有人会发现这个问题很有用。谢谢你的回答AkselA。我改进了代码,但在输出中,变量的结果显示在
部分,显示
结构(c(1,1,…)。Dim=c(6L,2L)
而不是Wendy name。为什么会出现这种情况?@Isa:注意,
x
在我的函数版本中从来没有被重用为变量名。当
x
转换为矩阵时,我将其存储为
xm
x
保持原样。这对于
替换()
按预期工作。您当时是如何显示这两个名称的?@Isa:我将函数更改为使用
match.call()$x
match.call()$y
而不是
substitute()
。现在它不应该受到变量重新分配的影响。
function (x, digits = max(3L, getOption("digits") - 3L), ...) 
{
    cat("\nCall:\n", paste(deparse(x$call), sep = "\n", collapse = "\n"), 
        "\n\n", sep = "")
    if (length(coef(x))) {
        cat("Coefficients:\n")
        print.default(format(coef(x), digits = digits), print.gap = 2L, 
            quote = FALSE)
    }
    else cat("No coefficients\n")
    cat("\n")
    invisible(x)
}
Summary  <-  function(x, y, print=TRUE) {
    p  <-  2
    n <- length(x)

    xm <- matrix(c(rep(1,n),x),n,p)
    bg <- solve(t(xm)%*%xm,t(xm)%*%y)
    invx <- solve(t(xm)%*%xm)
    xty <- t(xm)%*%y
    e <- y-xm%*%bg
    SCT <- sum(y^2)-n*(mean(y)^2)
    SCE <- sum(e*e)

    results <- list(TSS=SCT, ESS=SCE, p=p, x=x, y=y)

    if (SCE == 0) warning("Error square sum is zero", call.=FALSE)

    if (print) {
        cat("Results for the variables", "\n\t",
            deparse(match.call()$x), " and ", deparse(match.call()$y),
            "\n\n", sep="")
        cat("The total square sum is: ", SCT, "\n\n",
            "The error square sum is: ", SCE, "\n\n", sep="")
        invisible(results)
    } else {
        results
    }      
}
Wendy <- Carlos <- 1:6

Summary(x=Wendy, y=Carlos)

Results for the variables
    Wendy and Carlos

The total square sum is: 17.5

The error square sum is: 0

Warning message:
Error square sum is zero