关于 `rstatix` 包中的函数 `get_test_label` 和 `get_pwc_label` 的问题
Question about the functions `get_test_label` and `get_pwc_label` from the `rstatix` package
我最近熟悉了 rstatix
包。下面是使用此包中函数的示例代码。
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_label
或 get_pwc_label
等函数不会 return 文本,而是准备文本的命令。
例如,调用 get_test_label(res.test, detailed = TRUE)
得到:
paste("Anova, ", italic("F"), "(3,396)", " = ",
"5.26, ", italic("p"), " = ", "0.001",
paste(", ", eta["g"]^2, " = ", 0.04), "")
反过来,调用 get_pwc_label(pwc)
将导致:
paste("pwc: ", bold(c(t_test = "T test")), "; p.adjust: ",
bold("Bonferroni"))
现在我的问题,基本上是两个问题。
- 这些功能不是return文本而是命令的原因是什么?
- 如何制作您自己的 return 类似命令的函数。
R 的图形设备使用 ?plotmath
中定义的语法来区分文字和格式化文本。这种语法的一个基本特征是字符串定义文字文本,而函数定义对文本的操作,例如并置和格式化(更改字体、添加变音符号、在数学公式中正确使用空格等)。那么,您看到的是未计算的函数组合和定义格式化文本的字符串。这些通常称为 plotmath
表达式。
我可以为您提供一个基本示例,展示不同的表达式如何转换为图形输出,但 R 中内置了一个出色的演示:只需 运行 demo("plotmath")
在交互式 R session 并按照提示进行操作。
可用于创建表达式的函数包括 quote
、substitute
、bquote
和 str2lang
。您可能会使用其中之一来格式化,例如,情节标题。以下是我将如何使用每个函数生成表达式 paste("Michaelis constant: ", italic("K")["M"], " = ", 0.015)
.
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)'
)
差异很细微,因此值得浏览每个函数的帮助页面并运行查看那里的示例。
可用于创建表达式 向量 的函数包括 expression
和 str2expression
。您可以使用其中之一来一次格式化一个或多个标签,例如,在定义轴刻度标签时。以下是我将如何使用每个函数以 10 的递增幂为刻度格式化标签:
expression(10^0, 10^1, 10^2, 10^3, 10^4, 10^5)
str2expression(paste0(10, "^", 0:5))
最后,这是一个将所有内容组合在一起的有趣情节:
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
。
我最近熟悉了 rstatix
包。下面是使用此包中函数的示例代码。
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_label
或 get_pwc_label
等函数不会 return 文本,而是准备文本的命令。
例如,调用 get_test_label(res.test, detailed = TRUE)
得到:
paste("Anova, ", italic("F"), "(3,396)", " = ",
"5.26, ", italic("p"), " = ", "0.001",
paste(", ", eta["g"]^2, " = ", 0.04), "")
反过来,调用 get_pwc_label(pwc)
将导致:
paste("pwc: ", bold(c(t_test = "T test")), "; p.adjust: ",
bold("Bonferroni"))
现在我的问题,基本上是两个问题。
- 这些功能不是return文本而是命令的原因是什么?
- 如何制作您自己的 return 类似命令的函数。
R 的图形设备使用 ?plotmath
中定义的语法来区分文字和格式化文本。这种语法的一个基本特征是字符串定义文字文本,而函数定义对文本的操作,例如并置和格式化(更改字体、添加变音符号、在数学公式中正确使用空格等)。那么,您看到的是未计算的函数组合和定义格式化文本的字符串。这些通常称为 plotmath
表达式。
我可以为您提供一个基本示例,展示不同的表达式如何转换为图形输出,但 R 中内置了一个出色的演示:只需 运行 demo("plotmath")
在交互式 R session 并按照提示进行操作。
可用于创建表达式的函数包括 quote
、substitute
、bquote
和 str2lang
。您可能会使用其中之一来格式化,例如,情节标题。以下是我将如何使用每个函数生成表达式 paste("Michaelis constant: ", italic("K")["M"], " = ", 0.015)
.
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)'
)
差异很细微,因此值得浏览每个函数的帮助页面并运行查看那里的示例。
可用于创建表达式 向量 的函数包括 expression
和 str2expression
。您可以使用其中之一来一次格式化一个或多个标签,例如,在定义轴刻度标签时。以下是我将如何使用每个函数以 10 的递增幂为刻度格式化标签:
expression(10^0, 10^1, 10^2, 10^3, 10^4, 10^5)
str2expression(paste0(10, "^", 0:5))
最后,这是一个将所有内容组合在一起的有趣情节:
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
。