首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于“`rstatix`”包中的函数`get_test_label`和`get_pwc_label`的问题

关于“`rstatix`”包中的函数`get_test_label`和`get_pwc_label`的问题
EN

Stack Overflow用户
提问于 2021-11-07 16:33:43
回答 1查看 258关注 0票数 2

最近,我已经熟悉了rstatix包。下面是使用此包中函数的示例代码。

代码语言:javascript
复制
library(tidyverse)
library(rstatix)
library(ggpubr)

set.seed(1111)
n=100
df = tibble(
  x1 = rnorm(n, 0, 1.1),
  x2 = rnorm(n, 0.2, .1),
  x3 = rnorm(n, -.2, .2),
  x4 = rnorm(n, 0, 2),
) %>% pivot_longer(x1:x4)
df

pwc = df %>%
  pairwise_t_test(value~name, paired = TRUE,
                  p.adjust.method = "bonferroni") %>%
  add_xy_position(x = "name") %>%
  mutate(name=group1,
         lab = paste(p, " - ", p.adj.signif))
res.test = df %>% anova_test(value~name)

df %>% ggplot(aes(name, value))+
  geom_boxplot(alpha=0.6)+
  stat_pvalue_manual(pwc, step.increase=0.05, label = "lab")+
  labs(title = get_test_label(res.test, detailed = TRUE),
       subtitle = get_pwc_label(pwc))

但是,我注意到像get_test_labelget_pwc_label这样的函数并不返回文本,而是返回用于准备文本的命令。

例如,调用get_test_label(res.test, detailed = TRUE)提供如下内容:

代码语言:javascript
复制
paste("Anova, ", italic("F"), "(3,396)", " = ", 
    "5.26, ", italic("p"), " = ", "0.001", 
    paste(", ", eta["g"]^2, " = ", 0.04), "")

反过来,调用get_pwc_label(pwc)将导致:

代码语言:javascript
复制
paste("pwc: ", bold(c(t_test = "T test")), "; p.adjust: ", 
    bold("Bonferroni"))

现在我的问题基本上有两个问题。

为什么这些函数不返回文本,而是commands?

  • How使您自己的函数返回类似的命令.
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-15 09:45:01

R的图形设备使用?plotmath中定义的语法来区分文字文本和格式化文本。这种语法的一个基本特性是字符串定义文字文本,而函数定义对文本的操作,例如并置和格式化(更改字体、添加对话框、在数学公式中得到正确的空格等)。因此,您所看到的是定义格式化文本的函数和字符串的未评估组合。这些通常被称为plotmath表达式。

我可以为您提供一个基本示例,演示如何将不同的表达式转换为图形输出,但在R中有一个很好的示例:只需在交互式R会话中运行demo("plotmath")并按照提示操作即可。

您可以用来创建像您正在看到的表达式的函数包括quotesubstitutebquotestr2lang。您可能会使用其中之一来格式化,例如,一个情节标题。下面是如何使用每个函数生成表达式paste("Michaelis constant: ", italic("K")["M"], " = ", 0.015)

代码语言:javascript
复制
quote(
  paste("Michaelis constant: ", italic("K")["M"], " = ", 0.015)
)

substitute(
  paste("Michaelis constant: ", italic(sym)[sub], " = ", val),
  list(sym = "K", sub = "M", val = 0.015)
)

sym <- "K"
sub <- "M"
val <- 0.015
bquote(
  paste("Michaelis constant: ", italic(.(sym))[.(sub)], " = ", .(val))
)

str2lang(
  'paste("Michaelis constant: ", italic("K")["M"], " = ", 0.015)'
)

这些差异是微妙的,因此值得浏览每个函数的帮助页面并在其中运行示例。

可用于创建表达式向量的函数包括expressionstr2expression。您可以使用其中之一同时格式化一个或多个标签,例如,在定义轴勾标签时。下面是我如何使用每个函数在10倍的功率下格式化蜱的标签:

代码语言:javascript
复制
expression(10^0, 10^1, 10^2, 10^3, 10^4, 10^5)
str2expression(paste0(10, "^", 0:5))

最后,下面是一个有趣的情节,将所有的东西组合在一起:

代码语言:javascript
复制
plot.new()
plot.window(c(0, 1), c(1, 100000), log = "y")
box()
title(main = quote(paste("Michaelis constant: ", italic("K")["M"], " = ", 0.015)))
axis(side = 2, at = 10^(0:5), labels = str2expression(paste0(10, "^", 0:5)), las = 1)
text(x = seq(0, 1, by = 0.2), y = 10^(0:5), labels = str2expression(sprintf('%s("%s")', c("plain", "bold", "italic", "bolditalic", "symbol", "underline"), month.abb[1:6])))

关于更多的例子,请看一下?plotmath

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69874427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档