The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.
Most of the functionality is fs can be approximated with functions in base R or in a command line shell. The table at the end of this vignette can be used as a translation aid between these three methods.
fs functions smooth over some of the idiosyncrasies of file handling with base R functions:
Vectorization. All fs functions are vectorized, accepting multiple paths as input. Base functions are inconsistently vectorized.
Predictable return values that always convey a path. All fs functions return a character vector of paths, a named integer or a logical vector, where the names give the paths. Base return values are more varied: they are often logical or contain error codes which require downstream processing.
Explicit failure. If fs operations fail, they throw an error. Base functions tend to generate a warning and a system dependent error code. This makes it easy to miss a failure.
UTF-8 all the things. fs functions always convert input paths to UTF-8 and return results as UTF-8. This gives you path encoding consistency across OSes. Base functions rely on the native system encoding.
Naming convention. fs functions use a consistent
naming convention. Because base R’s functions were gradually added over
time there are a number of different conventions used
(e.g. path.expand()
vs normalizePath()
;
Sys.chmod()
vs file.access()
).
fs | base | shell |
---|---|---|
dir_ls("path") |
list.files("path") |
ls path |
dir_info("path") |
do.call(rbind, lapply(list.files("path"), file.info)) |
ls -al path |
dir_copy("path", "new-path") |
dir.create("new-path"); file.copy("path", "new-path", recursive=TRUE) |
cp path new-path |
dir_create("path") |
dir.create("path") |
mkdir path |
dir_delete("path") |
unlink("path", recursive = TRUE) |
rm -rf path |
dir_exists("path") |
dir.exists("path") |
if [ -d "path" ]; then ... ; fi |
dir_move() file_move ) |
file.rename("path", "new-path") |
mv path new-path |
dir_map("path", fun) |
No direct equivalent | for file in $(ls path); do ...; done |
dir_tree("path") |
No direct equivalent | tree path |
fs | base | shell |
---|---|---|
file_chmod("path", "mode") |
Sys.chmod("path", "mode") |
chmod mode path |
file_chown("path", "user_id", "group_id") |
No direct equivalent | chown options path |
file_copy("path", "new-path") |
file.copy("path", "new-path") |
cp path new-path |
file_create("new-path") |
file.create("new-path") |
touch new-path |
file_delete("path") |
unlink("path") |
rm path |
file_exists("path") |
file.exists("path") |
if [ -f "path" ]; then ... ; fi |
file_info("path") |
file.info("path") |
ls -al path |
file_move("path", "new-path") |
file.rename("path", "new-path") |
mv path new-path |
file_show("path") |
browseURL("path") |
open path |
file_touch() |
No direct equivalent | touch path |
file_temp() |
tempfile() |
mktemp |
file_test() |
No direct equivalent | if [ -d "path" ]; then ...; fi |
fs | base | shell |
---|---|---|
path("top_dir", "nested_dir", "file", ext = "ext") |
file.path("top_dir", "nested_dir", "file.ext") |
top_dir/nested_dir/file.ext |
path_temp() , path_temp("path") |
tempdir() ,
file.path(tempdir(), "path") |
mktemp -d |
path_expand("~/path") |
path.expand() |
realpath -m -s ~/path |
path_dir("path") |
dirname("path") |
dirname path |
path_file("path") |
basename("path") |
basename path |
path_home() |
path.expand("~") |
$HOME |
path_package("pkgname", "dir", "file") |
system.file("dir", "file", package = "pkgname") |
No direct equivalent |
path_norm("path") |
normalizePath() |
realpath |
path_real("path") |
normalizePath(mustWork = TRUE) |
realpath |
path_rel("path/foo", "path/bar") |
No direct equivalent | No direct equivalent |
path_common(c("path/foo", "path/bar", "path/baz")) |
No direct equivalent | No direct equivalent |
path_ext_remove("path") |
sub("\\.[a-zA-Z0-9]*$", "", "path") |
No direct equivalent |
path_ext_set("path", "new_ext") |
sub("\\.[a-zA-Z0-9]*$", "new_ext", "path") |
No direct equivalent |
path_sanitize("path") |
No direct equivalent | No direct equivalent |
These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.