我正在开发一个自定义函数,可以为图表添加两行字幕,我希望无论用户可能选择输入("character"或"expression"),都可以正确格式化标题.我在下面创建了一个玩具示例,以说明当前实现该功能的两个问题 -
NULL,两条线不对齐.编辑:
如果你有一个不同的解决方案实现相同的东西(如果用户提供的caption是NULL,那么默认的单行表达式打印为标题,否则打印为标题的两行表达式),我也愿意那.
尽管对象的类仍然存在是很重要的,"ggplot"因为我想使用ggplot2函数对结果图进行进一步修改.
# needed libraries
library(ggplot2)
# custom function to prepare a caption
caption_maker <- function(caption) {
# if caption is not null then add line separator
if (!is.null(caption)) {
caption <- paste(caption, "; \n", sep = "")
}
# prepare the caption with additional info
caption <- base::substitute(
expr =
paste(
y,
"In favor of null: ",
"log"["e"], …Run Code Online (Sandbox Code Playgroud) 我正在使用一个包并使用R CMD CHECK它devtools::check()生成以下代码NOTE:
> checking top-level files ... NOTE
Non-standard file/directory found at top level:
'README.Rmd'
Run Code Online (Sandbox Code Playgroud)
此问题的变体之前已经提出过(当README.md包含图像时,包检查时注意或警告),但其中提供的解决方案对我没有用.
这是我的.Rbuildignore档案.如上所述,我已经包括^README-.*\.png$:
^.*\.Rproj$
^\.Rproj\.user$
^CONDUCT\.md$
^\.travis\.yml$
^README-.*\.png$
^cran-comments\.md$
Run Code Online (Sandbox Code Playgroud)
此外,我的README.Rmd文档有以下块,保存所有数字/man/figures/
{r, echo = FALSE}
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>",
fig.path = "man/figures/README-"
)
Run Code Online (Sandbox Code Playgroud)
如果您需要有关该.Rmd文件的更多详细信息,请访问:https:
//github.com/IndrajeetPatil/ggstatsplot/blob/master/README.Rmd
鉴于最好摆脱所有NOTES成功通过CRAN的可能性R CMD CHECK,我该如何避免这种特殊情况NOTE呢?
我有一个名为ggstatsplot( https://indrajeetpatil.github.io/ggstatsplot/ )的 R 包,它依赖于一组S3相互共享一些方法的包。因此,每次加载包时,用户都会收到有关此问题的消息,这对大多数用户没有用。
> library(ggstatsplot)
Registered S3 method overwritten by 'broom.mixed':
method from
tidy.gamlss broom
Registered S3 methods overwritten by 'car':
method from
influence.merMod lme4
cooks.distance.influence.merMod lme4
dfbeta.influence.merMod lme4
dfbetas.influence.merMod lme4
Run Code Online (Sandbox Code Playgroud)
有什么我可以在包内部实现的东西,以避免这些消息被打印到用户的控制台?也许有什么用.onAttach?
我不再covr在Travis上使用R包得到代码覆盖(例如this build),它给出以下错误:

Travis之前从未遇到过任何问题,从以下提交日志可以看出,它突然停止了工作-
这是此软件包的GitHub存储库的链接,其中包含所有必要的详细信息(例如和的yaml文件):https : //github.com/IndrajeetPatil/ggstatsplottravis-cicodecov
关于如何摆脱此错误并获得travis为PR和master分支再次提供代码覆盖率的任何想法?
PS:
如果您想知道,此应用程序codecov也有权访问此存储库中的数据:
我正面临着R包装开发的一个特别棘手的问题.我自己的程序包ggstatsplot(https://github.com/IndrajeetPatil/ggstatsplot)依赖于userfriendlyscience,这取决于另一个被调用的程序包MBESS,它本身最终依赖于另一个名为的程序包gsl.在Windows机器ggstatsplot上安装没有任何问题(通过持续集成平台评估:https://ci.appveyor.com/project/IndrajeetPatil/ggstatsplot).AppVeyor
但每当包被上安装的Unix机器,它抛出的错误ggstatsplot,不能因为下载userfriendlyscience而MBESS不能下载,因为gsl不能下载.在Travis使用虚拟Unix机器的持续集成平台上也会发现同样的事情,其中包构建失败(https://travis-ci.org/IndrajeetPatil/ggstatsplot).
现在,在Unix机器上为用户解决这个问题的一种方法是配置GSL(如下所述:
在Mac上安装R gsl包),但我不可能指望每个用户ggstatsplot都要经历艰难的配置过程GSL.我希望他们只是跑步install.packages("ggstatsplot")并完成它.
所以我真的很感激,如果有人能提供任何有用的建议,我可以通过从源头上解决这个问题来简化我的包用户生活.我是否应该在软件包本身中包含哪些内容来代表用户处理此问题?
我有一个自定义函数,我正在从数据框中读取输入的变量rlang.无论输入的参数是引用还是不引用,此函数都可以正常工作.但是,奇怪的是,当使用此函数时purrr::pmap,它仅在引用参数时起作用.
所以我有两个问题:
为什么函数行为这样?
如何使用rlang这样一个函数,即使用于我也不必引用参数purrr::pmap?
这是一个使用简单函数突出显示此问题的最小代表:
# loading the needed libraries
library(rlang)
library(dplyr)
library(purrr)
# defining the function
tryfn <- function(data, x, y) {
data <-
dplyr::select(
.data = data,
x = !!rlang::enquo(x),
y = !!rlang::enquo(y)
)
# creating a dataframe of means
result_df <- data.frame(mean.x = mean(data$x), mean.y = mean(data$y))
# return the dataframe
return(result_df)
}
# without quotes (works!)
tryfn(iris, Sepal.Length, Sepal.Width)
#> mean.x mean.y
#> 1 5.843333 3.057333 …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个自定义函数,该函数使用 的rlang非标准评估来按多个变量对数据帧进行分组。
这就是我已经-
library(rlang)
# function definition
tryfn <- function(data, groups, ...) {
# preparing data
df <- dplyr::group_by(data, !!!rlang::enquos(groups))
print(head(df))
# applying some function `.f` on df that absorbs `...`
# .f(df, ...)
}
Run Code Online (Sandbox Code Playgroud)
这适用于单个分组变量 -
# works
tryfn(mtcars, am)
#> # A tibble: 6 x 11
#> # Groups: am [2]
#> mpg cyl disp hp drat wt qsec vs am gear carb
#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> …Run Code Online (Sandbox Code Playgroud) 为了解决我的 R 包中的问题,我希望尝试使用svglite图形设备来渲染ggplot绘图:
knitr::opts_chunk$set(dev = "svglite")
Run Code Online (Sandbox Code Playgroud)
但是,如果我这样做,{pkgdown} 工作流程将失败(失败日志)并显示警告消息:
1: 'mode(bg)' differs between new and previous
==> NOT changing 'bg'
2: 'mode(bg)' differs between new and previous
==> NOT changing 'bg'
Run Code Online (Sandbox Code Playgroud)
如果我理解正确的话,这些警告消息来自par(),它抱怨无法更改背景颜色 ( bg)。但我没有明确调用par(),也没有更改相关图的背景颜色。
所以我想知道为什么我会收到此错误以及如何解决它?
是否有任何可能的方法来更改 facet_wrap 变量的标签,如下所示。因此,例如,我希望它不是cyl: 4, cyl: 6, cyl: 8,而是读取condition: 4, condition: 6, condition: 8。当然,我可以通过重命名变量来做到这一点,但这不是我想要的。这是自定义函数的一个简单得多的版本,我不能随意重命名变量。
另一种说法是,我有任何自由标记facet_wrap我喜欢的任何东西吗?有点像在数据框 ( )中的x审美变量如何ggplot2可以有一些名称 (例如),但我仍然可以使用)将其替换为我自己的名称)。我想要类似的东西。 cylmtcarslabs(x = "cylinder")facet_wrap
library(dplyr)
library(datasets)
library(ggplot2)
data(mtcars)
# creating a dataframe
df <- dplyr::group_by(mtcars, .dots = c('cyl', 'am')) %>%
dplyr::summarize(counts = n()) %>%
dplyr::mutate(perc = (counts / sum(counts)) * 100) %>%
dplyr::arrange(desc(perc))
# preparing the plot
ggplot2::ggplot(df, aes('', counts)) +
geom_col(
position = 'fill',
color = …Run Code Online (Sandbox Code Playgroud) 下面是我编写的复杂自定义函数的一个简单得多的示例。在这个函数的全长形式中,
"layer1"对应于caption用户输入, "layer2"
对应于统计测试的结果,并且 "layer3"
对应于有关执行的统计测试的详细信息。但是当所有三层都包含在标题中时,它看起来像这样 -
library(ggplot2)
ggplot(iris, aes(Species, Sepal.Length)) +
geom_boxplot() +
labs(caption = substitute(atop(substitute(
atop("layer1", "layer2")
)
, "layer3")))
Run Code Online (Sandbox Code Playgroud)

由reprex 包(v0.2.1)于 2018 年 11 月 9 日创建
所以我想找出一种方法可以使所有三层的文本大小保持不变。我实际上不确定为什么在这种情况下文本大小会自动更改。
有什么办法可以防止这种情况发生吗?