Цикл по нескольким фреймам данных на ggplot - PullRequest
1 голос
/ 01 декабря 2019

Я очень плохо знаком с языком.

Я прочитал в нескольких файлах CSV как фреймы данных,

setwd("/Users/user/go/src/Project/outputcsv2D")

file_list <- list.files(path="/Users/user/go/src/Project/outputcsv2D")

filenames <- gsub("\\.csv$","", list.files(pattern="\\.csv$"))

for(i in filenames){
  assign(i, read.csv(paste(i, ".csv", sep="")))
}

, но когда я пытаюсь перебрать имена файлов [i] для построения,

#making a list of plots
plot_list = list()
for (i in filenames) {
  p = ggplot(filenames[i], aes(y, x, colour = color)) + geom_point(alpha = .4)+xlim(0, 150)+ylim(0,150)
  plot_list[[i]] = p
}

# Save plots to png. Makes a separate file for each plot.
for (i in filenames) {
  file_name = paste("2D", i, ".png", sep="")
  png(file_name)
  print(plot_list[[i]])
  dev.off()
}

это выдает мне эту ошибку:

Error: `data` must be a data frame, or other object coercible by `fortify()`, not a character vector

Я пробовал get () или as.data.frame (), но ни одна из них не работала. Каково было бы решение этой проблемы?

Ответы [ 3 ]

2 голосов
/ 01 декабря 2019

Или walk + read_csv из tidyverse

library(readr)
library(stringr)
library(dplyr)
library(purrr)
library(ggplot2)

walk(filenames, ~ read_csv(str_c(.x, ".csv") %>%
                      ggplot(., aes(y, x, colour = color)) +
                       geom_point(alpha = 0.4) +
                       xlim(0, 150)+
                       ylim(0,150) %>%
                  ggsave(plot = ., filename = str_c("2D", .x, ".png"))
       )
1 голос
/ 01 декабря 2019

Возможно, вам следует попробовать сделать один цикл для 1) чтения кадра данных, 2) построения графика и 3) сохранения графика:

for(i in filenames){
  df <- read.csv(paste(i, ".csv", sep=""))
  p = ggplot(df, aes(y, x, colour = color)) + geom_point(alpha = .4)+xlim(0, 150)+ylim(0,150)
  ggsave(plot = p, filename = paste0("2D", i, ".png"))
}
0 голосов
/ 01 декабря 2019

Я рекомендую использовать lapply() много.

filenamescsv <- paste0(filenames, ".csv")

lst_DF <- lapply(filenamescsv, read.csv)
gplots <- lapply(lst_DF, function(DF) ggplot(DF, aes(y, x, colour = color)) + geom_point(alpha = .4)+xlim(0, 150)+ylim(0,150))

Map(function(nam, p) {
    file_name <- paste("2D", nam, ".png", sep="")
    png(file_name)
    print(plot_list[[i]])
    dev.off()}, 
  filenames, gplots)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...