遍历数据框并绘制图形

时间:2019-02-04 15:04:47

标签: r loops ggplot2

我正在RStudio中工作,试图生成一些简单的图形和相关性。这可能是一个非常简单的修复程序,但我似乎无法遍历文件并生成图。有关文件,循环和示例数据框,请参见下文

> ls()
 [1] "let-7b-5p"     "let_7a_5p"     "miR_125b_5p"   "miR_16_5p"    "miR_182_5p"    "miR_21_5p"    "miR_30e_5p"    "miR_320c_2_3p" "miR_92a_1_3p"  "miR_92b_3p"
[10]  "rRNA-45S"      "tRNA_3p_1"    "tRNA_5p_2"    
> files <- ls()
> for(i in files){
+   plt <- ggplot(`i`, aes_string(x="Five", y = "Three")) +
+       geom_point(shape=16) +
+       geom_smooth(method=lm) 
+   print(plt)
+   pearson <- cor.test(`i`$Five, `i`[, "Three"], method = "pearson", conf.level = 0.95)
+   print(pearson)
+ }
Error: `data` must be a data frame, or other object coercible by `fortify()`, not a character vector
> print(`let-7b-5p`)
       Five        Three       One
A      14.06       13.14       13.62
B      14.45       14.64       14.21
C       7.84       10.23        8.05
D      12.84       13.13       13.07
E      16.55       15.97       16.01
F      12.92       12.02       12.37

我知道它会将“文件”视为字符向量,但是我不确定为什么传递给循环时为什么会出现问题。

1 个答案:

答案 0 :(得分:1)

当函数(此处为ggplot)想要data.frame时,将字符串作为字符向量传递将不会在循环中工作,其原因与无法在循环外工作的原因相同。 .R不知道从全局环境中检索给定名称的对象。

我建议(类似于@patL的注释)检索对象,然后运行循环:

for(i in files){
  dat <- get(i) # new line
  plt <- ggplot(dat, aes_string(x="Five", y = "Three")) + 
  ...
}

请注意,ls()将返回环境中所有对象的字符向量,无论它们的类如何,因此,如果定义了其他任何内容,则可能会遇到问题。从外观上看,您可以使用pattern的{​​{1}}参数来确保至少返回一个与特定模式匹配的对象名称向量。