R 为什么函数不显示它应该显示的内容?
我在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 你能检查一下吗 (这是一个示例,实际上我必须
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,等等…
)
Summarylist()
从对象创建列表,但是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)的参数是什么?@ChaboxYou不能“列出”一个“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