我在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
您能检查一下吗?
(这是一个示例,实际上我必须显示更多的东西the standar error is: number3, the variance is number4, etc..
)
Summary <- function(x, y, print=TRUE) {
p <- 2
n <- length(x)
x <- matrix(c(rep(1,n),x),n,p)
bg <- solve(t(x)%*%x,t(x)%*%y)
invx <- solve(t(x)%*%x)
xty <- t(x)%*%y
e <- y-x%*%bg
SCT <- sum(y^2)-n*(mean(y)^2)
SCE <- sum(e*e)
result <- list(
cat("The total square sum is:", SCT),
"\n",
cat("The error square sum is:", SCE, "\n"))
return(result)
}
x <- y <- 1:6
Summary(x, y)
答案 0 :(得分:1)
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
用于换行和制表),其中{{1} },分隔符,在末尾指定。有时,sep
内会有一个paste()
调用,在这种情况下,cat()
只是为“ paste()
”打印准备一些字符。我们还注意到,有多个对cat()
和cat()
的调用,并且混合和匹配已经完成,没有问题。最后,是MrFlick在评论中提到的print()
的示例。该命令确保该函数不会输出其参数(在本例中为invisible()
),但是您仍然可以将其分配给变量。
有了这些见解,我们是否可以改善x
?
Summary()
看起来有点复杂。让我们测试一下。
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
}
}