Вложенный цикл или эквивалент - PullRequest
1 голос
/ 23 апреля 2019

Я пытаюсь сделать вложенный цикл, я начинаю с простого цикла, и я хотел бы сделать то же самое с разными кадрами данных;

Это прекрасно работает:

  set.seed(123)
    df1= data.frame(date= 1:10,
                vartre=rnorm(10, 30, 4),
                varpre=rnorm(10, 10, 5))

var=names(df1)

for(x in var ) {

plot(df1$date,df1[,x], type="l", main=x)

}

ТеперьЯ хотел бы сделать то же самое с разными df´s, я пытался сделать с вложенным циклом, но это не работает, пример:

df2= data.frame(date= 1:10,
                varkyt=rnorm(10, 100, 40),
                varkdr=rnorm(10, 50, 5))

df3= data.frame(date= 1:10,
                varwer=rnorm(10, 300, 400),
                varpou=rnorm(10, 1000, 500))

dfs=c("df1", "df2", "df3")
for(i in dfs) {
var=names(i)
    for(x in var ) {
plot(i$date,i[,x], type="l", main=paste(i,x)))
}
}

Заранее спасибо

1 Ответ

0 голосов
/ 23 апреля 2019

Мы можем использовать lapply для циклического перебора list (mget - возвращает list data.frame из строковых идентификаторов) и построения графика

out <- lapply(mget(dfs), function(dat)  {
        var <- names(dat)[-1]
        lapply(var, function(x) plot(dat$date, dat[,x], type = "l",
           main = x))
     })

Если нам нужно сохранить его в папке

path <- "path/to/folder/"
lapply(mget(dfs), function(dat)  {
        var <- names(dat)[-1]
        lapply(var, function(x) {

        png(filename=paste(path, "grafico", x,".png"))
          plot(dat$date, dat[,x], type = "l",
           main = x)
           dev.off()
           }
           )
     })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...