Skip to content

[R-pkg-devel] Error: [writeRaster] cannot write file

7 messages · Duncan Murdoch, Berry Boessenkool, Iris Simmons +1 more

#
Hi,

I am developing an R package where I need to save Raster file with .tif extension to the tempdir(). I am using terra::writeRaster for the same. While it works through R CMD check in mac, it is failing in R hub builder.
Snippet ?V
.saverast <- function(typ, rast, outdir) {

  if (is.null(outdir) || length(outdir) == 0) {
    outdir <- tempdir()
  }

  # Save the plot as a raster file
  fp <- file.path(outdir, paste("plots", "/",
                                typ, "_",
                                stringr::str_replace_all(Sys.time(), "[^a-zA-Z0-9]", ""),
                                ".tif", sep = ""))
    # Create the "plots" directory if it doesn't exist
  if (!dir.exists(fp)) {
    dir.create(fp, recursive = TRUE)
  }

  terra::writeRaster(rast, overwrite = TRUE,
                     filename = fp,
                     gdal = c("COMPRESS=NONE"))
  message(paste("raster created", fp, sep = ": "), "\n")
}

Error ?V

  Error: [writeRaster] cannot write file
   12.         ?|?wgeohabnet:::.saverast(typ, rast, outdir)
   13.           ?u?wterra::writeRaster(rast, overwrite = TRUE, filename = fp, gdal = c("COMPRESS=NONE"))
   14.           ?|?wterra::writeRaster(rast, overwrite = TRUE, filename = fp, gdal = c("COMPRESS=NONE"))
   15.             ?|?wterra (local) .local(x, filename, ...)
   16.               ?|?wterra:::messages(x, "writeRaster")
   17.                 ?|?wterra:::error(f, x at pnt$getError())



Best Regards,
Krishna Keshav
#
What were you using as "outdir"?
On 09/10/2023 2:59 p.m., Keshav, Krishna wrote:
#
Are you intentionally running dir.exists on _file_names?
dir.exists("existing_folder/imaginary.file") shows FALSE, somwhat counterintuitively.
You might want to wrap the filenames in dirname...

Regards,
Berry
#
Outdir is either a directory like getwd(), tempdir() etc or empty/null. If it is empty/null, then I set it to tempdir().

if (is.null(outdir) || length(outdir) == 0) {
    outdir <- tempdir()
}
I am not sure how to debug when running it in Rbuilder. But you can look at results here - https://builder.r-hub.io/status/geohabnet_1.0.0.tar.gz-a2eaa40ccf1d026bbebf5077bfb482d5

Best Regards,
Krishna Keshav

From: Duncan Murdoch <murdoch.duncan at gmail.com>
Date: Monday, October 9, 2023 at 4:08 PM
To: Keshav, Krishna <kkeshav at ufl.edu>, r-package-devel at r-project.org <r-package-devel at r-project.org>
Subject: Re: [R-pkg-devel] Error: [writeRaster] cannot write file
[External Email]

What were you using as "outdir"?
On 09/10/2023 2:59 p.m., Keshav, Krishna wrote:

  
  
#
On 09/10/2023 6:56 p.m., Keshav, Krishna wrote:
That doesn't answer the question, and the link you provided doesn't 
answer it either, as far as I can see.  In the test and the vignette 
that generated the errors, something specific was passed as outdir.  But 
what? If it was getwd(), that's bound to fail -- you don't have 
permission to write there.  tempdir() should have worked, but Berry 
pointed out some other things that might be problems.

Duncan Murdoch
#
You wrote

# create the plots directory if it does not exist

but then created a directory named outdir/plots/typ_Sys.time.tif

You need to rewrite the code like:

plotsdir <- file.path(outdir, "plots")
fp <- file.path(plotsdir,  paste(typ, "_",
    stringr::str_replace_all(Sys.time(), "[^a-zA-Z0-9]", ""),
                                ".tif", sep = ""))
# Create the "plots" directory if it doesn't exist
  if (!dir.exists(plotsdir)) {
    dir.create(plotsdir, recursive = TRUE)
  }
On Mon, Oct 9, 2023, 15:49 Keshav, Krishna <kkeshav at ufl.edu> wrote:

            

  
  
#
Hi,

This works. I think this is also an implementation of what Berry and Duncan suggested earlier. Thanks.

Best Regards,
Krishna Keshav

From: Iris Simmons <ikwsimmo at gmail.com>
Date: Monday, October 9, 2023 at 7:37 PM
To: Keshav, Krishna <kkeshav at ufl.edu>
Cc: r-package-devel at r-project.org <r-package-devel at r-project.org>
Subject: Re: [R-pkg-devel] Error: [writeRaster] cannot write file
[External Email]
You wrote

# create the plots directory if it does not exist

but then created a directory named outdir/plots/typ_Sys.time.tif

You need to rewrite the code like:

plotsdir <- file.path(outdir, "plots")
fp <- file.path(plotsdir,  paste(typ, "_",
    stringr::str_replace_all(Sys.time(), "[^a-zA-Z0-9]", ""),
                                ".tif", sep = ""))
# Create the "plots" directory if it doesn't exist
  if (!dir.exists(plotsdir)) {
    dir.create(plotsdir, recursive = TRUE)
  }
On Mon, Oct 9, 2023, 15:49 Keshav, Krishna <kkeshav at ufl.edu<mailto:kkeshav at ufl.edu>> wrote:
Hi,

I am developing an R package where I need to save Raster file with .tif extension to the tempdir(). I am using terra::writeRaster for the same. While it works through R CMD check in mac, it is failing in R hub builder.
Snippet ?V
.saverast <- function(typ, rast, outdir) {

  if (is.null(outdir) || length(outdir) == 0) {
    outdir <- tempdir()
  }

  # Save the plot as a raster file
  fp <- file.path(outdir, paste("plots", "/",
                                typ, "_",
                                stringr::str_replace_all(Sys.time(), "[^a-zA-Z0-9]", ""),
                                ".tif", sep = ""))
    # Create the "plots" directory if it doesn't exist
  if (!dir.exists(fp)) {
    dir.create(fp, recursive = TRUE)
  }

  terra::writeRaster(rast, overwrite = TRUE,
                     filename = fp,
                     gdal = c("COMPRESS=NONE"))
  message(paste("raster created", fp, sep = ": "), "\n")
}

Error ?V

  Error: [writeRaster] cannot write file
   12.         ?|?wgeohabnet:::.saverast(typ, rast, outdir)
   13.           ?u?wterra::writeRaster(rast, overwrite = TRUE, filename = fp, gdal = c("COMPRESS=NONE"))
   14.           ?|?wterra::writeRaster(rast, overwrite = TRUE, filename = fp, gdal = c("COMPRESS=NONE"))
   15.             ?|?wterra (local) .local(x, filename, ...)
   16.               ?|?wterra:::messages(x, "writeRaster")
   17.                 ?|?wterra:::error(f, x at pnt$getError())



Best Regards,
Krishna Keshav


______________________________________________
R-package-devel at r-project.org<mailto:R-package-devel at r-project.org> mailing list
https://stat.ethz.ch/mailman/listinfo/r-package-devel