CircosHeatmap-aardio/dist/lib/r-library/fs/doc/function-comparisons.html
2025-01-12 04:36:52 +08:00

522 lines
13 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta http-equiv="X-UA-Compatible" content="IE=EDGE" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Comparison of fs functions, base R, and shell commands</title>
<script>// Pandoc 2.9 adds attributes on both header and div. We remove the former (to
// be compatible with the behavior of Pandoc < 2.8).
document.addEventListener('DOMContentLoaded', function(e) {
var hs = document.querySelectorAll("div.section[class*='level'] > :first-child");
var i, h, a;
for (i = 0; i < hs.length; i++) {
h = hs[i];
if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6
a = h.attributes;
while (a.length > 0) h.removeAttribute(a[0].name);
}
});
</script>
<style type="text/css">
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
span.underline{text-decoration: underline;}
div.column{display: inline-block; vertical-align: top; width: 50%;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
ul.task-list{list-style: none;}
</style>
<style type="text/css">body {
background-color: #fff;
margin: 1em auto;
max-width: 700px;
overflow: visible;
padding-left: 2em;
padding-right: 2em;
font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 14px;
line-height: 1.35;
}
#TOC {
clear: both;
margin: 0 0 10px 10px;
padding: 4px;
width: 400px;
border: 1px solid #CCCCCC;
border-radius: 5px;
background-color: #f6f6f6;
font-size: 13px;
line-height: 1.3;
}
#TOC .toctitle {
font-weight: bold;
font-size: 15px;
margin-left: 5px;
}
#TOC ul {
padding-left: 40px;
margin-left: -1.5em;
margin-top: 5px;
margin-bottom: 5px;
}
#TOC ul ul {
margin-left: -2em;
}
#TOC li {
line-height: 16px;
}
table {
margin: 1em auto;
border-width: 1px;
border-color: #DDDDDD;
border-style: outset;
border-collapse: collapse;
}
table th {
border-width: 2px;
padding: 5px;
border-style: inset;
}
table td {
border-width: 1px;
border-style: inset;
line-height: 18px;
padding: 5px 5px;
}
table, table th, table td {
border-left-style: none;
border-right-style: none;
}
table thead, table tr.even {
background-color: #f7f7f7;
}
p {
margin: 0.5em 0;
}
blockquote {
background-color: #f6f6f6;
padding: 0.25em 0.75em;
}
hr {
border-style: solid;
border: none;
border-top: 1px solid #777;
margin: 28px 0;
}
dl {
margin-left: 0;
}
dl dd {
margin-bottom: 13px;
margin-left: 13px;
}
dl dt {
font-weight: bold;
}
ul {
margin-top: 0;
}
ul li {
list-style: circle outside;
}
ul ul {
margin-bottom: 0;
}
pre, code {
background-color: #f7f7f7;
border-radius: 3px;
color: #333;
white-space: pre-wrap;
}
pre {
border-radius: 3px;
margin: 5px 0px 10px 0px;
padding: 10px;
}
pre:not([class]) {
background-color: #f7f7f7;
}
code {
font-family: Consolas, Monaco, 'Courier New', monospace;
font-size: 85%;
}
p > code, li > code {
padding: 2px 0px;
}
div.figure {
text-align: center;
}
img {
background-color: #FFFFFF;
padding: 2px;
border: 1px solid #DDDDDD;
border-radius: 3px;
border: 1px solid #CCCCCC;
margin: 0 5px;
}
h1 {
margin-top: 0;
font-size: 35px;
line-height: 40px;
}
h2 {
border-bottom: 4px solid #f7f7f7;
padding-top: 10px;
padding-bottom: 2px;
font-size: 145%;
}
h3 {
border-bottom: 2px solid #f7f7f7;
padding-top: 10px;
font-size: 120%;
}
h4 {
border-bottom: 1px solid #f7f7f7;
margin-left: 8px;
font-size: 105%;
}
h5, h6 {
border-bottom: 1px solid #ccc;
font-size: 105%;
}
a {
color: #0033dd;
text-decoration: none;
}
a:hover {
color: #6666ff; }
a:visited {
color: #800080; }
a:visited:hover {
color: #BB00BB; }
a[href^="http:"] {
text-decoration: underline; }
a[href^="https:"] {
text-decoration: underline; }
code > span.kw { color: #555; font-weight: bold; }
code > span.dt { color: #902000; }
code > span.dv { color: #40a070; }
code > span.bn { color: #d14; }
code > span.fl { color: #d14; }
code > span.ch { color: #d14; }
code > span.st { color: #d14; }
code > span.co { color: #888888; font-style: italic; }
code > span.ot { color: #007020; }
code > span.al { color: #ff0000; font-weight: bold; }
code > span.fu { color: #900; font-weight: bold; }
code > span.er { color: #a61717; background-color: #e3d2d2; }
</style>
</head>
<body>
<h1 class="title toc-ignore">Comparison of fs functions, base R, and
shell commands</h1>
<p>Most of the functionality is <strong>fs</strong> can be approximated
with functions in <strong>base R</strong> 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.</p>
<p><strong>fs</strong> functions smooth over some of the idiosyncrasies
of file handling with base R functions:</p>
<ul>
<li><p>Vectorization. All <strong>fs</strong> functions are vectorized,
accepting multiple paths as input. Base functions are inconsistently
vectorized.</p></li>
<li><p>Predictable return values that always convey a path. All
<strong>fs</strong> 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.</p></li>
<li><p>Explicit failure. If <strong>fs</strong> 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.</p></li>
<li><p>UTF-8 all the things. <strong>fs</strong> 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.</p></li>
<li><p>Naming convention. <strong>fs</strong> functions use a consistent
naming convention. Because base Rs functions were gradually added over
time there are a number of different conventions used
(e.g. <code>path.expand()</code> vs <code>normalizePath()</code>;
<code>Sys.chmod()</code> vs <code>file.access()</code>).</p></li>
</ul>
<div id="directory-functions" class="section level2">
<h2>Directory functions</h2>
<table>
<colgroup>
<col width="33%" />
<col width="33%" />
<col width="33%" />
</colgroup>
<thead>
<tr class="header">
<th>fs</th>
<th>base</th>
<th>shell</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><code>dir_ls(&quot;path&quot;)</code></td>
<td><code>list.files(&quot;path&quot;)</code></td>
<td><code>ls path</code></td>
</tr>
<tr class="even">
<td><code>dir_info(&quot;path&quot;)</code></td>
<td><code>do.call(rbind, lapply(list.files(&quot;path&quot;), file.info))</code></td>
<td><code>ls -al path</code></td>
</tr>
<tr class="odd">
<td><code>dir_copy(&quot;path&quot;, &quot;new-path&quot;)</code></td>
<td><code>dir.create(&quot;new-path&quot;); file.copy(&quot;path&quot;, &quot;new-path&quot;, recursive=TRUE)</code></td>
<td><code>cp path new-path</code></td>
</tr>
<tr class="even">
<td><code>dir_create(&quot;path&quot;)</code></td>
<td><code>dir.create(&quot;path&quot;)</code></td>
<td><code>mkdir path</code></td>
</tr>
<tr class="odd">
<td><code>dir_delete(&quot;path&quot;)</code></td>
<td><code>unlink(&quot;path&quot;, recursive = TRUE)</code></td>
<td><code>rm -rf path</code></td>
</tr>
<tr class="even">
<td><code>dir_exists(&quot;path&quot;)</code></td>
<td><code>dir.exists(&quot;path&quot;)</code></td>
<td><code>if [ -d &quot;path&quot; ]; then ... ; fi</code></td>
</tr>
<tr class="odd">
<td><del><code>dir_move()</code></del> (see <code>file_move</code>)</td>
<td><code>file.rename(&quot;path&quot;, &quot;new-path&quot;)</code></td>
<td><code>mv path new-path</code></td>
</tr>
<tr class="even">
<td><code>dir_map(&quot;path&quot;, fun)</code></td>
<td><em>No direct equivalent</em></td>
<td><code>for file in $(ls path); do ...; done</code></td>
</tr>
<tr class="odd">
<td><code>dir_tree(&quot;path&quot;)</code></td>
<td><em>No direct equivalent</em></td>
<td><code>tree path</code></td>
</tr>
</tbody>
</table>
</div>
<div id="file-functions" class="section level2">
<h2>File functions</h2>
<table>
<colgroup>
<col width="33%" />
<col width="33%" />
<col width="33%" />
</colgroup>
<thead>
<tr class="header">
<th>fs</th>
<th>base</th>
<th>shell</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><code>file_chmod(&quot;path&quot;, &quot;mode&quot;)</code></td>
<td><code>Sys.chmod(&quot;path&quot;, &quot;mode&quot;)</code></td>
<td><code>chmod mode path</code></td>
</tr>
<tr class="even">
<td><code>file_chown(&quot;path&quot;, &quot;user_id&quot;, &quot;group_id&quot;)</code></td>
<td><em>No direct equivalent</em></td>
<td><code>chown options path</code></td>
</tr>
<tr class="odd">
<td><code>file_copy(&quot;path&quot;, &quot;new-path&quot;)</code></td>
<td><code>file.copy(&quot;path&quot;, &quot;new-path&quot;)</code></td>
<td><code>cp path new-path</code></td>
</tr>
<tr class="even">
<td><code>file_create(&quot;new-path&quot;)</code></td>
<td><code>file.create(&quot;new-path&quot;)</code></td>
<td><code>touch new-path</code></td>
</tr>
<tr class="odd">
<td><code>file_delete(&quot;path&quot;)</code></td>
<td><code>unlink(&quot;path&quot;)</code></td>
<td><code>rm path</code></td>
</tr>
<tr class="even">
<td><code>file_exists(&quot;path&quot;)</code></td>
<td><code>file.exists(&quot;path&quot;)</code></td>
<td><code>if [ -f &quot;path&quot; ]; then ... ; fi</code></td>
</tr>
<tr class="odd">
<td><code>file_info(&quot;path&quot;)</code></td>
<td><code>file.info(&quot;path&quot;)</code></td>
<td><code>ls -al path</code></td>
</tr>
<tr class="even">
<td><code>file_move(&quot;path&quot;, &quot;new-path&quot;)</code></td>
<td><code>file.rename(&quot;path&quot;, &quot;new-path&quot;)</code></td>
<td><code>mv path new-path</code></td>
</tr>
<tr class="odd">
<td><code>file_show(&quot;path&quot;)</code></td>
<td><code>browseURL(&quot;path&quot;)</code></td>
<td><code>open path</code></td>
</tr>
<tr class="even">
<td><code>file_touch()</code></td>
<td><em>No direct equivalent</em></td>
<td><code>touch path</code></td>
</tr>
<tr class="odd">
<td><code>file_temp()</code></td>
<td><code>tempfile()</code></td>
<td><code>mktemp</code></td>
</tr>
<tr class="even">
<td><code>file_test()</code></td>
<td><em>No direct equivalent</em></td>
<td><code>if [ -d &quot;path&quot; ]; then ...; fi</code></td>
</tr>
</tbody>
</table>
</div>
<div id="path-functions" class="section level2">
<h2>Path functions</h2>
<table>
<colgroup>
<col width="33%" />
<col width="33%" />
<col width="33%" />
</colgroup>
<thead>
<tr class="header">
<th>fs</th>
<th>base</th>
<th>shell</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><code>path(&quot;top_dir&quot;, &quot;nested_dir&quot;, &quot;file&quot;, ext = &quot;ext&quot;)</code></td>
<td><code>file.path(&quot;top_dir&quot;, &quot;nested_dir&quot;, &quot;file.ext&quot;)</code></td>
<td><code>top_dir/nested_dir/file.ext</code></td>
</tr>
<tr class="even">
<td><code>path_temp()</code>, <code>path_temp(&quot;path&quot;)</code></td>
<td><code>tempdir()</code>,
<code>file.path(tempdir(), &quot;path&quot;)</code></td>
<td><code>mktemp -d</code></td>
</tr>
<tr class="odd">
<td><code>path_expand(&quot;~/path&quot;)</code></td>
<td><code>path.expand()</code></td>
<td><code>realpath -m -s ~/path</code></td>
</tr>
<tr class="even">
<td><code>path_dir(&quot;path&quot;)</code></td>
<td><code>dirname(&quot;path&quot;)</code></td>
<td><code>dirname path</code></td>
</tr>
<tr class="odd">
<td><code>path_file(&quot;path&quot;)</code></td>
<td><code>basename(&quot;path&quot;)</code></td>
<td><code>basename path</code></td>
</tr>
<tr class="even">
<td><code>path_home()</code></td>
<td><code>path.expand(&quot;~&quot;)</code></td>
<td><code>$HOME</code></td>
</tr>
<tr class="odd">
<td><code>path_package(&quot;pkgname&quot;, &quot;dir&quot;, &quot;file&quot;)</code></td>
<td><code>system.file(&quot;dir&quot;, &quot;file&quot;, package = &quot;pkgname&quot;)</code></td>
<td><em>No direct equivalent</em></td>
</tr>
<tr class="even">
<td><code>path_norm(&quot;path&quot;)</code></td>
<td><code>normalizePath()</code></td>
<td><code>realpath</code></td>
</tr>
<tr class="odd">
<td><code>path_real(&quot;path&quot;)</code></td>
<td><code>normalizePath(mustWork = TRUE)</code></td>
<td><code>realpath</code></td>
</tr>
<tr class="even">
<td><code>path_rel(&quot;path/foo&quot;, &quot;path/bar&quot;)</code></td>
<td><em>No direct equivalent</em></td>
<td><em>No direct equivalent</em></td>
</tr>
<tr class="odd">
<td><code>path_common(c(&quot;path/foo&quot;, &quot;path/bar&quot;, &quot;path/baz&quot;))</code></td>
<td><em>No direct equivalent</em></td>
<td><em>No direct equivalent</em></td>
</tr>
<tr class="even">
<td><code>path_ext_remove(&quot;path&quot;)</code></td>
<td><code>sub(&quot;\\.[a-zA-Z0-9]*$&quot;, &quot;&quot;, &quot;path&quot;)</code></td>
<td><em>No direct equivalent</em></td>
</tr>
<tr class="odd">
<td><code>path_ext_set(&quot;path&quot;, &quot;new_ext&quot;)</code></td>
<td><code>sub(&quot;\\.[a-zA-Z0-9]*$&quot;, &quot;new_ext&quot;, &quot;path&quot;)</code></td>
<td><em>No direct equivalent</em></td>
</tr>
<tr class="even">
<td><code>path_sanitize(&quot;path&quot;)</code></td>
<td><em>No direct equivalent</em></td>
<td><em>No direct equivalent</em></td>
</tr>
</tbody>
</table>
</div>
<!-- code folding -->
<!-- dynamically load mathjax for compatibility with self-contained -->
<script>
(function () {
var script = document.createElement("script");
script.type = "text/javascript";
script.src = "https://mathjax.rstudio.com/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML";
document.getElementsByTagName("head")[0].appendChild(script);
})();
</script>
</body>
</html>