小编D O*_*gle的帖子

覆盖基R中的S3方法

我试图从教学中使用的本地包中的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)

r r-s3

10
推荐指数
1
解决办法
1456
查看次数

ggplot2 中 size= 和 linewidth= 有何关系

我不理解 中的点、线和文本之间size=linewidth=关系ggplot2。下面我尝试展示我的困惑。

\n

这份关于美学规范的 tidyverse 文档中,做出了以下声明:

\n
    \n
  • 回复:线条(在“线宽”小标题下)。
  • \n
\n
\n

由于历史错误,线宽单位大约为 0.75 毫米。\n将其精确设置为 1 毫米会改变大量现有\n绘图,因此我们\xe2\x80\x99 陷入了这个错误。

\n
\n
    \n
  • 回复:点(在“颜色和填充”小标题下)
  • \n
\n
\n

填充部分的大小由size控制,描边的大小由strike控制。每个点的测量单位为毫米,点的总大小为两者之和。

\n
\n
    \n
  • 回复:文本(在“字体大小”小标题下)
  • \n
\n
\n

文本大小以毫米为单位测量。这是不寻常的,但可以使文本的大小与线和点的大小保持一致。

\n
\n

考虑到这些,似乎所有三个都是以毫米为单位测量的。[旁注:除了在单位为 pts 的情况下size=使用时。] 我对这种语言的解释是,对于相同的文本和点(实际上+ )应该具有相同的大小,但由于“历史错误。”element_text()size=linewidth=size=stroke=

\n

然而,我下面的实验并不支持这一点。

\n
ggplot() +\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)

r ggplot2

6
推荐指数
1
解决办法
1003
查看次数

roxygen2:导出打印方法的问题

我已经更新至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)

r roxygen2

5
推荐指数
1
解决办法
800
查看次数

标签 统计

r ×3

ggplot2 ×1

r-s3 ×1

roxygen2 ×1