美文网首页Arcgis教程
R语言学习:第一个for循环&第一个样品分布展示

R语言学习:第一个for循环&第一个样品分布展示

作者: 研究僧小蓝哥 | 来源:发表于2019-07-19 22:54 被阅读0次

接触R语言已经一年多了,期间都是断断续续的学习。书买了不少,看完的没多少。毕竟,Google在手,一搜就来。

for循环

为什么要写for循环呢?因为我一堆数据需要算很多的回归方程,如果一个一个计算的话,那我估计两三天就没了。碰巧的是,我刚好看到宏基因组推送的代码
),里面有几个我看起来及其复杂的if循环,我就想我是不是可以用for循环来解决我的问题呢?说干就干。想到这个主意的时候已经十点半了,合上电脑,赶回宿舍,匆匆洗漱完,打开电脑撸代码。不算顺利吧,做到十二点五十多完成了for循环的基本构架,能够批量计算回归方程和绘图了。满意的爬上床睡觉了。突然想到不行啊,我还是得把回归方程抄一遍啊,整不成。第二天早上赶到实验室,匆匆改了代码,期间失败很多次,总是无法批量把回归方程写进矩阵(数据框)中。突然一下子就想明白是某个变量的问题了。一改,成了。哈哈。贴上代码,留个念想,鼓励自己。

#载入绘图相关的包
library(ggplot2)

#数据载入
raw_data <- read.table("raw_data.txt", header = T, sep = "\t")

#创建矩阵
matrix <- matrix(0,ncol(raw_data),4)

#for循环
for (i in 2:ncol(raw_data)) {
  conc <- raw_data$conc
  amino_acid <- raw_data[i]
  data <- data.frame(x = conc, y = amino_acid)
  colnames(data) <- c("x","y")
  amino_acid_name <- colnames(raw_data[i])

  fit <- lm(data$y ~ data$x)
  slope <- round(fit$coefficients[2],4)
  intercept <- round(fit$coefficients[1],4)
  info <- summary(fit)
  maintitle <- paste(amino_acid_name,"\n","y=",slope,"x+",intercept, "\n","R=", round(sqrt(info$r.squared),4))
  regression_equation <- paste("y=",slope,"x+",intercept)
  xlab <- paste(amino_acid_name," Concentration(mM/L)")
  ylab <- ("Peak Area")
  
  ggplot(data = data, mapping = aes(x = data$x, y = data$y))+
    geom_point(position = "identity")+
    geom_smooth(method = lm, se = FALSE,color = "black")+
    annotate("text", x = max(raw_data[1])-0.025, y = max(raw_data[i])+0.05,label = maintitle)+
    theme_bw()+
    theme(panel.grid = element_blank(),
          plot.title = element_text(hjust = 0.5),
          axis.line = element_line(linetype = "solid"), 
          #axis.ticks = element_line(size = 1,colour = "black"), 
          axis.ticks = element_blank(),
          plot.background = element_rect(linetype = "solid"),
          panel.border = element_rect(colour = "black", size = 1),
          axis.text = element_text(colour = "black"), 
          axis.text.x = element_text(colour = "black"), 
          axis.text.y = element_text(colour = "black")) + 
    labs(x = xlab, y = ylab, title = " ")
    
  FileName <- paste(amino_acid_name,"_regression_equation", ".pdf", sep = "_")
  ggsave(FileName, width = 8, height = 8)
  
  matrix[i-1,1] <- amino_acid_name
  matrix[i-1,2] <- regression_equation
  matrix[i-1,3] <- paste("r^2=", round(info$r.squared,4))
  matrix[i-1,4] <- paste("R=", round(sqrt(info$r.squared),4))
  
  if (i == ncol(raw_data)) {
    write.csv(matrix,file = "regrression equation.csv")
  }
}

这个代码看起来是臃肿的,但是是我的第一个for循环,我喜欢,哈哈哈,慢慢改进。


样品分布展示

出去办点事情,地铁上收到老师的一张图片:

Molecular Plant文献图片 【1】
然后,想让我实现图中的样品分布地图展示。
一看,我*,这图肯定是R实现的,那一定会有现成的R包。瞬间想到之前中科院遗传发育所白洋老师课题组在Nature Biotechnology上的文章【2】,那里面是一定有代码和原始数据的。一找,果然,找到了
火速下载,哈哈,拿到原始数据,开始上手撸代码:
data <- read.table("2.txt",header = T, sep = "\t")

mp <- NULL
mapworld <- borders("world",colour = "gray50", fill = "cornsilk")
mp <- ggplot() + mapworld + ylim(-90,90) + xlim(-180,180)
map <- mp + geom_point(aes(x = data$Longitude, y = data$Latitude, color = data$Subspecies))+
  scale_size(range = c(2, 9))+
  ggtitle("lixiang")+
  theme(plot.subtitle = element_text(vjust = 1), 
        plot.caption = element_text(vjust = 1), 
        panel.grid.major = element_line(linetype = "blank"), 
        panel.grid.minor = element_line(linetype = "blank"), 
        panel.background = element_rect(fill = NA))
map

图是什么亚子的呢?咻咻咻→


xiangxiang的丑图

那他们文章里的图片是啥样的呢?
嚯嚯嚯→


NBT文章 Figure 1a【2】
差点。明天改进。

批量化处理是计算机的优势,也应该成为解决问题的一种思考方式。
多看,多想,多记,多练,多试。
下班,回寝。


参考文献

【1】Wang H, Xu X, Vieira FG, et al. The Power of Inbreeding: NGS-Based GWAS of Rice Reveals Convergent Evolution during Rice Domestication. Mol Plant. 2016;9(7):975-85
【2】 Zhang J, Liu YX, Zhang N, et al. NRT1.1B is associated with root microbiota composition and nitrogen use in field-grown rice. Nat Biotechnol. 2019;37(6):676-684


附:

  1. for循环乱编数据(坚果云下载)
  2. for_loop(GitHub地址)
  3. 地图展示(GitHub地址)

相关文章

  • R语言学习:第一个for循环&第一个样品分布展示

    接触R语言已经一年多了,期间都是断断续续的学习。书买了不少,看完的没多少。毕竟,Google在手,一搜就来。 fo...

  • R语言-0基础学习4-实战1-常见操作

    R语言学习系列R语言-0基础学习1-数据结构R语言-0基础学习2-构建子集R语言-0基础学习3-循环排序信息处理函...

  • R语言基础

    R语言基础 第一个问题:在mac电脑上把课程学习完,准备写作业,发...

  • 使用R语言包RIdeogram展示blast双序列比对结果

    RIdeogram 是用来展示 染色体组型 (idiogram)的一个R语言包,比如展示snp的密度分布;展示某类...

  • 学习小组Day4笔记--李文静

    R的基本操作 昨天学习了r的基本操作,昨天下夜班,头晕晕乎乎的,笔记记得有点简单。 画了人生第一个R语言图,纪念一下。

  • 2020-06-29

    R语言boxplot绘图函数 boxplot 用于绘制箱线图,我们都知道boxplot 用于展示一组数据的总体分布...

  • R语言学习-写第一个R包

    首先,安装Rtools: http://cran.r-project.org/bin/windows/Rtools...

  • 机器学习与R语言学习笔记01:kNN

    通过将《机器学习与R语言》一书中的代码tidyverse化,来学习这本书。 书中第一个例子是利用kNN算法来诊断乳...

  • R语言for循环①

    for循环是一种重复控制结构,可以让您有效地编写一个需要执行特定次数的循环。 示例: 它产生如下结果: 下标访问 ...

  • R语言 循环

    可能有一种情况,当你需要执行一段代码几次。 通常,顺序执行语句。 首先执行函数中的第一个语句,然后执行第二个语句,...

网友评论

    本文标题:R语言学习:第一个for循环&第一个样品分布展示

    本文链接:https://www.haomeiwen.com/subject/hceelctx.html