【发布时间】:2020-04-13 06:30:19
【问题描述】:
我正在尝试构建一个 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) 中的错误:数学函数的非数字参数
我做错了什么?
【问题讨论】:
-
如果您包含一个简单的reproducible example,其中包含可用于测试和验证可能解决方案的示例输入和所需输出,则更容易为您提供帮助。但是问题很可能是您尝试在已被女士评估的
aes()中使用i。也许aes(x=log2(.data[[i]]))会起作用。还要使用paste0()而不是paste()以确保您的文件名没有空格。 -
效果很好,谢谢!你能解释一下 .data[[i]] 的语法吗?在我对 R 的有限了解中,[[ ]] 用于对列表进行子集化。这是否意味着 .data[[i]] 告诉从列表“i”中获取数据,并且由于“i”是对应于 mydata 列的基因名称(数据框列是列表,对吗?)它返回其值?为什么 is 不能仅与 [[i]] 一起使用?
-
.data是 ggplot 在绘图时为您创建的“神奇”变量。正如您尝试做的那样,它可以更轻松地通过字符值对数据进行子集化。这是一种避免使用!!sym()方法的方法。