【问题标题】:use paste to get preexisting variable使用粘贴来获取预先存在的变量
【发布时间】:2019-10-29 10:16:00
【问题描述】:

我正在尝试在 ggplot 中创建一个循环,如下所示:

LEDnum = c(1,2,3,4,5)

for (i in 1:length(LEDnum))
{
ggplot(LEDref,aes(x=sample1))+
  geom_line(aes(y=assign(paste("LEDrefLED",LEDnum[i],sep="")))) +
  ggtitle(paste("LED ref + LED ",LEDnum[i],sep=""))
  }

我已经存在名为 LEDrefLED1、LEDrefLED2 等的对象(数字列表)。但是,当我运行此代码时,它不会将 geom_line 数据识别为我现有的变量。我认为这是因为 paste() 创建了一个字符串,但由于我是 R 新手,所以我不知道如何让它将其识别为预先存在的对象。

【问题讨论】:

  • 我建议检查help(assign)。它不是get 的变量,而是assigns 变量的名称。要获得一个变量,您需要同时对多个变量使用get og mget。您更可能想要的是将数据存储在list 中,并使用i 引用list。尝试检查this question 和第一个答案。或在论坛中搜索[ggplot][for-loop]This question 也可能有帮助。

标签: r


【解决方案1】:

你可以使用 aes_string,我没有你的数据集,所以我模拟了 LEDrefLED1 的值。此外,如果数据集不是太大,请将图存储在列表中

library(gridExtra)
library(reshape2)

LEDref = data.frame(matrix(rnorm(100),20,5))
colnames(LEDref) = paste("LEDrefLED",1:5,sep="")
LEDref$sample1 = 1:20

LEDnum = c(1,2,3,4,5)
plots = vector("list",5)
for (i in 1:length(LEDnum))
{
plots[[i]] = ggplot(LEDref ,aes(x=sample1))+
  geom_line(aes_string(y=paste("LEDrefLED",LEDnum[i],sep=""))) +
  ggtitle(paste("LED ref + LED ",LEDnum[i],sep=""))
  }
do.call(grid.arrange,plots)

大多数时候,也许有更好的方法来组织您的数据。所以你总是可以旋转你拥有的数据框,并像下面那样做一个分面网格,这样你就可以避免字符串和循环..

dat=melt(LEDref,id.vars="sample1")
colnames(dat)[2:3] = c("LEDnum","value")
ggplot(dat,aes(x=sample1,y=value))+ 
geom_line()+
facet_wrap(~LEDnum)

【讨论】:

    猜你喜欢
    • 2018-01-10
    • 2016-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-10
    • 2012-01-19
    • 1970-01-01
    相关资源
    最近更新 更多