在 R 中循环字符向量

Loop over character vector in R

我正在尝试构建一个 for() 循环来绘制和保存数据集中基因列表的 ggplot。 我的初始代码如下:

for(i in genelist){
  plot <- ggplot() +
           geom_density(data = mydata, aes(x=log2(i)), fill="pink", alpha = 0.5) +
           xlab(paste("log2 ", i))
  ggsave(plot, filename = paste("plot_",i ,".png"))
  }

genelist 是一个 chr 向量。

mydata 是一个数据框,其中 colnames 是基因名称,rownames 是患者条形码,matrix 是计数值。

我得到以下错误:

图像节省 11.3 x 5.98 log2(i) 中的错误:数学函数的非数字参数

由于错误似乎来自绘图保存,我尝试了没有以下代码:

for(i in genelist){
  plot <- ggplot() +
           geom_density(data = mydata, aes(x=log2(i)), fill="pink", alpha = 0.5) +
           xlab(paste("log2 ", i))
   }

循环结束时没有错误(i = 我在基因列表中的最后一个基因)但是当我尝试显示情节时:

log2(i) 错误:数学函数的非数字参数

我做错了什么?

我们可以写一个函数:

library(ggplot2)

plot_save <- function(i) {
    plot <- ggplot() +
             geom_density(data = mydata, aes(x=log2(!!sym(i)), 
                          fill="pink", alpha = 0.5)) +
             xlab(paste("log2 ", i))

    ggsave(plot, filename = paste0("plot_",i ,".png"))
}

并将 genelist 传递给函数。

lapply(genelist, plot_save)