используйте paste, чтобы получить существующую переменную - PullRequest
1 голос
/ 29 октября 2019

Я пытаюсь создать цикл в 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 () создает символьную строку, но поскольку я новичок в RI, я не знаю, как заставить его распознавать его как существующий ранее объект.

1 Ответ

1 голос
/ 29 октября 2019

вы можете использовать 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...