我们的生物信息学马拉松授课非常注重于编程基础,一般来说完成了两周的r编程语言的互动式授课之后我仍然是会建议大家完成我的b站视频学习和对应的100个r练习题;
生信基石之R语言
B站的10个小时教学视频务必看完,参考 GitHub 仓库存放的相关学习路线指导资料:https://github.com/jmzeng1314/R_bilibili ,思维导图在,https://share.mubu.com/doc/HGT7XBmgg
可以参考一些优秀笔记,比如https://mubu.com/doc/2KUiSCfVsg
初级10 个题目:http://www.bio-info-trainee.com/3793.html
中级要求是:http://www.bio-info-trainee.com/3750.html
高级要求是完成20题: http://www.bio-info-trainee.com/3415.html
统计专题 30题:http://www.bio-info-trainee.com/4385.html
可视化专题30题:http://www.bio-info-trainee.com/4387.html
r全套资料
很多朋友之所以学习R语言其实就是为了重复一些简单的数据库挖掘文章,所以我也顺便录制了GEO数据库挖掘课程,代码在:https://github.com/jmzeng1314/geo,如果你网络很差,就下载打包版本的geo代码,https://share.weiyun.com/5vrfsqv
授课配套思维导图是,https://share.mubu.com/doc/19S0XYlVcg
配套教学视频在B站:https://www.bilibili.com/video/av26731585/
还有一个公共数据库挖掘:https://www.bilibili.com/video/av37568990
如果是需要安装R包,请务必参考:http://www.bio-info-trainee.com/3727.html 代码
专门为R语言建立了 GitHub 仓库存放相关学习路线指导资料:https://github.com/jmzeng1314/R_bilibili
最近有小伙伴反馈在做题的时候出现了一个百思不得其解的bug,是数据框的列名居然会影响绘图,蛮适合我们的人工智能大模型答疑的专辑,所以我也视频演练了一下;
第一次提问:在r编程语言里面绘制一个箱线图
在R语言中,你可以使用ggplot2
包来绘制箱线图,或者使用基础图形系统中的boxplot()
函数。以下是两种方法的示例:
使用ggplot2
包绘制箱线图
首先,确保你已经安装并加载了ggplot2
包:
install.packages("ggplot2") # 如果你还没有安装ggplot2包
library(ggplot2)
然后,创建一些模拟数据并绘制箱线图:
# 创建模拟数据
set.seed(123) # 为了可重复性
data <- data.frame(
Category = rep(c("Group1", "Group2"), each = 100),
Value = c(rnorm(100, mean = 50, sd = 10), rnorm(100, mean = 60, sd = 15))
)
# 使用ggplot2绘制箱线图
ggplot(data, aes(x = Category, y = Value)) +
geom_boxplot() +
labs(title = "Boxplot Example", x = "Category", y = "Values")
使用基础R函数boxplot()
绘制箱线图
如果你不想使用ggplot2
,可以使用R的基础图形函数boxplot()
:
# 使用相同的模拟数据
boxplot(Value ~ Category, data = data,
ylab = "Values", xlab = "Category",
main = "Boxplot Example")
这两个示例都会生成一个箱线图,显示两个组(Group1和Group2)的值分布。ggplot2
提供了更多的定制选项和美观的图形输出,而boxplot()
函数则提供了一个更简单快捷的绘图方法。根据你的具体需求和偏好选择使用哪一种。
第二次提问;还有ggpubr包,ggstat等吗
在R语言中,除了ggplot2
包之外,还有几个扩展包可以用于绘制包含统计信息的图形,包括箱线图。以下是两个常用的包:
- ggpubr包:
ggpubr
是一个基于ggplot2
的扩展包,它提供了创建符合出版物要求的图形的功能。这个包简化了为ggplot2
图形添加p值和显著性标记的过程,并且支持多种图形的绘制,如箱线图、点图、条形图和线图等。安装可以通过CRAN或GitHub进行:
install.packages("ggpubr")
# 或者
devtools::install_github("kassambara/ggpubr")
- 使用
ggpubr
绘制箱线图的示例代码:
library(ggpubr)
ggboxplot(data, x = "分组变量", y = "数值变量",
palette = "jco") + # 使用jco颜色方案
stat_compare_means() # 添加p值和显著性标记
- ggstatsplot包:
ggstatsplot
是另一个ggplot2
的扩展包,它允许用户创建包含统计细节的图形。这个包特别适合科研人员,因为它提供了一系列的函数来绘制箱线图、散点图、直方图等,并自动包含统计测试的结果。安装可以通过GitHub:
devtools::install_github("IndrajeetPatil/ggstatsplot")
- 使用
ggstatsplot
绘制箱线图的示例代码:
library(ggstatsplot)
ggbetweenstats(data = 数据框,
x = 分组变量,
y = 数值变量,
type = "p", # 显著性类型
conf.level = 0.95) # 置信水平
这两个包都提供了丰富的定制选项和自动化的统计测试结果展示,使得数据可视化和结果解释更加直观和方便。
第三次提问:直接把报错的bug贴给大模型
我使用了ggstatsplot然后报错了Error in `select()`:
! Names must be unique.
✖ These names are duplicated:
* "expression" at locations 2 and 11.
Run `rlang::last_trace()` to see where the error occurred.
在使用ggstatsplot
包绘制图形时遇到”Error in select()
: ! Names must be unique.”的错误,这通常意味着在数据处理过程中,列名或其他标识符出现了重复。根据搜索结果,这个问题可能与数据处理方式有关,尤其是在使用dplyr
包的select()
函数时。
解决这个问题的一种方法是确保在进行选择操作时,所选的列名是唯一的。例如,如果你在创建一个自定义函数来绘制图形,并且函数内部使用了select()
,你需要确保传递给select()
的变量名在数据框中不是重复的。如果需要从函数参数中动态选择列,可以使用rlang
包中的sym()
或!!
操作符来避免非预期的列名重复问题。
此外,如果错误发生在使用ggstatsplot
的ggwithinstats()
函数时,这可能是因为在处理大量数据点时,函数内部的某些操作导致了列名不唯一。在这种情况下,尝试减少数据点的数量,或者检查数据框确保没有重复的列名,可能会有所帮助。
如果上述方法仍然不能解决问题,建议查看ggstatsplot
的官方文档和GitHub问题跟踪页面,看看是否有其他用户报告了类似的问题以及可能的解决方案。同时,确保你的ggstatsplot
包是最新版本,因为软件更新可能包含错误修复。
模拟数据测试流程:
# 创建模拟数据
set.seed(123) # 为了可重复性
data <- data.frame(
Category = rep(c("Group1", "Group2"), each = 100),
Value = c(rnorm(100, mean = 50, sd = 10), rnorm(100, mean = 60, sd = 15))
)
library(ggplot2)
# 使用ggplot2绘制箱线图
ggplot(data, aes(x = Category, y = Value)) +
geom_boxplot() +
labs(title = "Boxplot Example", x = "Category", y = "Values") + theme_minimal()
library(ggstatsplot)
ggbetweenstats(data = data ,
x = Category,
y = Value ,
type = "p", # 显著性类型
conf.level = 0.95) # 置信水平
df=data.frame(
expression=rnorm(100),
gene=rep(LETTERS[1:5],20)
)
head(df)
library(ggplot2)
# 使用ggplot2绘制箱线图
ggplot(df, aes(x = gene, y = expression)) +
geom_boxplot() +
labs(title = "Boxplot Example", x = "Category", y = "Values") + theme_minimal()
library(ggstatsplot)
ggbetweenstats(data = df,
x = gene,
y = expression ,
type = "p", # 显著性类型
conf.level = 0.95) # 置信水平
最后还是靠人工debug
定位到了 : https://github.com/IndrajeetPatil/ggstatsplot/issues/396
> rlang::last_trace()
<error/vctrs_error_names_must_be_unique>
Error in `select()`:
! Names must be unique.
✖ These names are duplicated:
* "expression" at locations 2 and 11.
---
Backtrace:
▆
1. ├─ggstatsplot::ggbetweenstats(...)
2. │ ├─base::suppressWarnings(...)
3. │ │ └─base::withCallingHandlers(...)
4. │ └─ggstatsplot:::.centrality_ggrepel(...)
5. │ ├─base::suppressWarnings(...)
6. │ │ └─base::withCallingHandlers(...)
7. │ └─statsExpressions::centrality_description(...)
8. │ └─... %>% .glue_to_expression()
9. ├─statsExpressions:::.glue_to_expression(.)
10. │ └─... %>% .add_package_class()
11. ├─statsExpressions:::.add_package_class(.)
12. │ └─tibble::as_tibble(data)
13. ├─dplyr::mutate(...)
14. ├─dplyr::ungroup(.)
15. ├─dplyr::mutate(., expression = list(parse_expr(expression)))
16. ├─dplyr::rowwise(.)
17. ├─dplyr::select(...)
18. └─dplyr:::select.data.frame(...)
Run rlang::last_trace(drop = FALSE) to see 14 hidden frames.
解决方案:
colnames(df)[1]='exp'
head(df)
library(ggstatsplot)
ggbetweenstats(data = df,
x = gene,
y = exp ,
type = "p", # 显著性类型
conf.level = 0.95) # 置信水平
成功的绘图应该是如下所示: