On 06/05/2019 12:16 p.m., Jim Hester wrote:
For what it's worth, the recommendation to use `tempfile()` is very
confusing to R users.

Often users (particularly new users) jump directly to examples when
reading documentation and when you have these more complicated
examples they do not realize they can just use a simple string
literal.

See https://github.com/tidyverse/readr/issues/635 for an issue where
multiple users explicitly request examples which do _not_ use
`tempfile()`.

I think beginners rarely like the help pages, and that's really to be expected: help pages need to be complete and correct, and beginners really need a small subset of possibilities. Beginners need tutorials.

In the Github issue, you mentioned pollution of the working directory, but I think a bigger problem is destruction of user data, e.g. if a user has a file "wine.csv", and the example writes to that file.

So you need to do something to protect users. I think making examples a little complicated by using setwd(tempdir()) with a literal filename, or writing to tempfile() is worth it.

Duncan Murdoch


On Fri, May 3, 2019 at 7:59 PM Duncan Murdoch <murdoch.dun...@gmail.com> wrote:

On 03/05/2019 6:33 p.m., Jarrett Phillips wrote:
Hello,

My R package has a function with an argument to specify whether numerical
results should be outputted to a CSV file.

CRAN policy stipulates verbatim that

Packages should not write in the user’s home filespace (including
clipboards), nor anywhere else on the file system apart from the R
session’s temporary directory (or during installation in the location
pointed to by TMPDIR: and such usage should be cleaned up). Installing into
the system’s R installation (e.g., scripts to its bin directory) is not
allowed.

I know I should use tempdir() within my package function, but I've not seen
any examples on how this is best done within existing R packages.

Within my package documentation examples for my function, I have the lines:

   \dontshow{.oldwd <- setwd(tempdir())}

... some R code ...

\dontshow{setwd(.oldwd)}

but I have been informed that this is not the accepted way.

Any ideas from the community on how do do this properly?

Use the tempfile() function to generate a filename in the temporary
directory.  You might want to use the "pattern" or "fileext" arguments,
but don't change the "tmpdir" argument.

Then write to that file.

For example,

filename <- tempfile(fileext = ".csv")
write.csv(df, filename)

It's a good idea to clean up afterwards using

unlink(filename)

______________________________________________
R-package-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-package-devel

______________________________________________
R-package-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-package-devel

Reply via email to