我正在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
我知道它会将“文件”视为字符向量,但是我不确定为什么传递给循环时为什么会出现问题。
答案 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}}参数来确保至少返回一个与特定模式匹配的对象名称向量。