我试图从教学中使用的本地包中的R stats包中覆盖print.anova()函数.基本上,我想删除标题的打印并添加"总"行而不用新类创建新函数(例如,ANOVA()).
该函数如下所示:
print.anova <- function(x,digits=max(getOption("digits")-2,3),
signif.stars=getOption("show.signif.stars"),totalSS=TRUE,rm.heading=TRUE,...) {
if (!any(grepl("Res.Df",colnames(x)))) { # exclusion for multiple lm objects
if (!any(grepl("Levene",attr(x,"heading")))) { # exclusion for levenes.test
if (totalSS) { # add total SS row
x <- rbind(x,c(sum(x$Df),sum(x[,"Sum Sq"]),NA,NA,NA))
row.names(x)[dim(x)[1]] <- "Total"
}
}
}
if (rm.heading) attr(x,"heading") <- NULL # remove heading
stats::print.anova(x,digits=digits,signif.stars=signif.stars,...)
invisible(x)
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,我不确定是将它作为函数,方法,S3方法,这些的某种组合或其他完全导出.例如,当我尝试这个(roxygenize代码的一部分)时:
#'@export
Run Code Online (Sandbox Code Playgroud)
运行Rcmd检查时,我收到以下警告:
S3 methods shown with full name in documentation object 'print.anova':
'print.anova'
Run Code Online (Sandbox Code Playgroud)
但是当我加载我的包时,该函数按预期工作.
但是,如果我试试这个:
#'@method print anova
#'@S3method print anova
Run Code Online (Sandbox Code Playgroud)
我没有用Rcmd检查得到任何警告或错误,但是当我尝试在R中使用该函数时,它在stats包命名空间中找到原始函数.此外,如果我这样做
getAnywhere(print.anova)
Run Code Online (Sandbox Code Playgroud)
我明白了
2 differing …Run Code Online (Sandbox Code Playgroud) 我不理解 中的点、线和文本之间size=的linewidth=关系ggplot2。下面我尝试展示我的困惑。
在这份关于美学规范的 tidyverse 文档中,做出了以下声明:
\n\n\n由于历史错误,线宽单位大约为 0.75 毫米。\n将其精确设置为 1 毫米会改变大量现有\n绘图,因此我们\xe2\x80\x99 陷入了这个错误。
\n
\n\n填充部分的大小由size控制,描边的大小由strike控制。每个点的测量单位为毫米,点的总大小为两者之和。
\n
\n\n文本大小以毫米为单位测量。这是不寻常的,但可以使文本的大小与线和点的大小保持一致。
\n
考虑到这些,似乎所有三个都是以毫米为单位测量的。[旁注:除了在单位为 pts 的情况下size=使用时。] 我对这种语言的解释是,对于相同的文本和点(实际上+ )应该具有相同的大小,但由于“历史错误。”element_text()size=linewidth=size=stroke=
然而,我下面的实验并不支持这一点。
\nggplot() +\n geom_hline(yintercept=1,linewidth=20) +\n geom_text(data=data.frame(x=0.5,y=1,label="Text"),\n mapping=aes(x=x,y=y,label=label),\n size=20,color="red") +\n geom_point(data=data.frame(x=0.4,y=1),mapping=aes(x=x,y=y),\n pch=21,size=10,stroke=10,fill="red",color="blue") +\n geom_point(data=data.frame(x=0.6,y=1),mapping=aes(x=x,y=y),\n pch=21,size=20,stroke=0,fill="orange") +\n geom_point(data=data.frame(x=0.7,y=1),mapping=aes(x=x,y=y),\n pch=21,size=0,stroke=20,color="green") +\n geom_point(data=data.frame(x=0.8,y=1),mapping=aes(x=x,y=y),\n pch=21,size=10,stroke=10*0.75,fill="orange",color="green") +\n scale_x_continuous(limit=c(0.35,0.85)) …Run Code Online (Sandbox Code Playgroud) 我已经更新至V4.0.0 roxygen2和我现在正在尝试转换@ S3method和@method命令@export以下的指示命令在这里.这似乎对我的所有方法都有效,除了那些与print相关的方法.
这是一个玩具示例,说明了我的问题(我理解示例的愚蠢).这是.R文件......
#' Test.
#'
#' Test.
#'@aliases zzzTest print.zzzTest summary.zzzTest
#'@param v A numeric vector.
#'@param x A \code{zzzTest} object.
#'@param object A \code{zzzTest} object.
#'@param \dots Additional arguments for the S3 methods.
#'@return A \code{zzzTest} object.
#'@keywords manip
#'@examples
#'z <- zzzTest(runif(10,1,2))
#'print(z)
#'summary(z)
#'@rdname zzzTest
#'@export zzzTest
zzzTest <- function(v) {
tmp <- log(v)
class(tmp) <- "zzzTest"
}
#'@rdname zzzTest
#'@export
print.zzzTest <- function(x,...) { print(x, ...) }
#'@rdname zzzTest
#'@export
summary.zzzTest <- …Run Code Online (Sandbox Code Playgroud)