【问题标题】:creating folder inside directory in R and save results there with the name of file name to save plots在 R 中的目录内创建文件夹并使用文件名保存结果以保存绘图
【发布时间】:2016-02-11 08:03:31
【问题描述】:

我有 40 座建筑物的数据。每个建筑物都包含二氧化碳、温度、热量等文件夹。然后在每个文件夹中都有房屋不同区域的数据。例如,对于二氧化碳,我有走廊、卧室、客厅等的数据(时间序列收集)。我需要所有这些数据文件的热图。到目前为止,我能做的是,我编写了一个代码进入每个目录,然后是每个文件夹,然后访问文件并在 Rstudi 中绘制热图。代码是:

setwd("C:/Users/...")
folders <- list.dirs(full.names = TRUE)

result <- sapply(folders[-1], function(x){
res<-lapply(files, function (x) {
[some heatmap function]
P1<- ggplot(df, aes(Time, Date, fill =reading)) + geom_tile(colour = "grey") + scale_fill_gradientn(colours=c("darkblue", "red", "yellow"),   values=rescale(c(0, 1000, 2000)),  guide="colorbar")+scale_x_discrete(breaks = lab1)
plot(P1)
  })})

我真正想要的是,将每个文件的热图结果与文件夹名称+文件名称(如 CO2.hallway.jpeg 等)存储在同一文件夹中。自过去 2 天以来,我正在尝试各种代码,但没有一个对我有用。谁能帮我解决这个问题。我会非常感谢你。

【问题讨论】:

    标签: r


    【解决方案1】:

    您要做的是更改工作目录或lapply-loop 中文件的路径。

    类似的东西

    setwd("...")
    folders <- list.dirs(full.names = T)
    
    res <- sapply(folders[-1], function(dir){
    
      # INSERT OTHER CODE PARTS HERE
    
      P1 <- ggplot(...) + geom_x()
    
      # Option 1
      setwd(dir)
      ggsave(P1, filename = paste0("CO2.", dir, ".jpg")) 
    
      # Or Option2
      ggsave(P1, filename = paste(dir, paste0("CO2.", dir, ".jpg"), sep = "/"))
      # I encourage you to use pdf (best quality, can be included in LaTeX and Markdown), otherwise png (better quality)
    })
    

    添加:最小工作示例

    在所有子方向上保存绘图的 MWE 如下所示:

    folders <- list.dirs(full.names = T)
    
    lapply(folders[-1], function(dir){
      dat <- data.frame(x = 1:10, y = cumsum(rnorm(10)))
    
      P1 <- ggplot(dat, aes(x = x, y  = y)) + geom_line()
      ggsave(P1, filename = paste(dir, paste0("plot.png"), sep = "/"))
    })
    

    添加 v2:MWE 包括读取数据

    lapply(folders[-1], function(dir2){
    
      # read the data
      files <- list.files(dir2, pattern = "*.csv", recursive = F)
    
      # finds the last "./" and takes everything afterwards
      # aka, it returns the up-most folder
      folder <- substr(dir2, 
                       start = regexpr("\\./[^\\./]*$", dir2) + 2, 
                       stop = nchar(dir2)) 
    
      lapply(files, function(file, folder){
        # find the filename, aka. exclude .csv
        f.name <- substr(file, start = 1,
                         stop = regexpr(".csv", file) - 1)
    
        # load each file to the loadeddat-data.frame
        loadeddat <- read.table(paste(folder, file, sep = "/"))
    
        # plot the data as you wish
        P1 <- ggplot(loadeddat, aes(x = x, y  = y)) + geom_line()
    
        # create the name for the plot
        nam <- paste(folder, # i.e., folder1
                     paste0(folder, "-", f.name, ".png"), # i.e., folder1-file1.png
                     sep = "/") # whole name/path looks like this: 
                     # "folder1/folder1-file1.png"
    
        # save it
        ggsave(P1, filename = nam)
      }, folder = folder)
    })
    

    这有帮助吗?

    【讨论】:

    • 谢谢大卫。你的代码给了我这个错误:文件错误(文件,“rt”):无法打开连接,另外,CO2只是一个例子,我希望每个单独文件的名称与目录名称一起粘贴到那里。
    • 这可能是由于目录名称中的一些点和斜线...尝试添加的最小工作示例并从中扩展您的代码(我已将其添加到我的答案中)
    • 使用您的代码,我可以将 png 图保存在工作目录的每个文件夹中,名称为 plot.png。但是当我在这段代码中使用我的函数时,它不起作用。我认为问题在于读取文件。这就是我读取文件 folders &lt;- list.dirs(full.names = TRUE) 结果 files <- list.files(dir, pattern="*.csv", full.names=TRUE, recursive=FALSE) res&lt;-lapply(files, function (x) { t &lt;- read.csv(x, header=T) data&lt;-t P1&lt;- ggplot(setwd(dir) ggsave(P1, filename = paste(dir, paste0("plot.jpeg"), sep = "/"))) 任何线索?
    • 不,抱歉,这是一个编辑错误。我很抱歉。我面临的真正问题是读取数据文件。我想我在那里犯了一些错误。你有什么线索吗?
    • 我添加了第二个 MWE,其中包括加载数据......这对你有帮助吗?如果是这样,请考虑投票并将其标记为答案!谢谢!
    【解决方案2】:

    遍历名称并使用dir.create() 函数创建您需要的文件夹,然后访问它们。超级简单:http://rfunction.com/archives/2432

    【讨论】:

      猜你喜欢
      • 2016-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-20
      • 1970-01-01
      • 2010-10-14
      相关资源
      最近更新 更多