| 関数名 | 引数 | 返り値 |
|---|---|---|
| .Last.value | 無し | 最後の返り値を返す |
| .libPaths | 無し | ライブラリのパスを表示する |
| environment | fun | 実行された場所のenvironmentを返す |
| find.package | パッケージ名 | パッケージの保存場所のパスを表示する |
| get | 関数名 | 関数の情報を表示する |
| getNamespace | パッケージ名 | パッケージの名前空間を表示する |
| getRversion | 無し | Rのバージョンを返す |
| licence | 無し | Rのライセンスを表示する |
| loadNameSpaces | 無し | 名前空間を表示する |
| object.size | オブジェクト名 | オブジェクトのファイルサイズを表示する |
| parent.frame | n(数値) | 親environmentを表示する |
| path.package | パッケージ名 | パッケージの保存場所のパスを表示する |
| R.home | component | Rのインストール先のディレクトリを返す |
| R.version | 無し | Rのバージョンの詳細情報を返す |
| search | 無し | ロードしたパッケージとオブジェクトを返す |
| Sys.Date | 無し | システムの日付を返す |
| Sys.getenv | x, unset | 現在のRの環境変数を返す |
| Sys.getlocate | 無し | localeの情報を表示する |
| Sys.glob | パス名 | ワイルドカードでファイル名を指定して返す |
| Sys.info | 無し | システムの情報を返す |
| Sys.localeconv | 無し | 数値や通貨の設定を返す |
| Sys.setenv | 無し | sys.calls、sys.parents、sys.framesの各結果を返す |
| Sys.setFileTime | ファイル名、日時 | ファイルの更新時間を変更 |
| Sys.sleep | 数値 | 数値の秒数演算を一時停止する |
| sys.status | 無し | sys.calls、sys.parents、sys.framesの各結果を返す |
| Sys.time | 無し | システムの日時を返す |
| Sys.timezone | 無し | システムのタイムゾーンを返す |
| Sys.which | 文字列 | システムのアプリケーションのパスを返す |
| system.file | パッケージ名 | パッケージのパスを返す |
| system.time | 演算(expr) | 演算にかかる時間を返す |
| tempfile | 文字列 | 一時ファイルのパスを返す |
| tempdir | 無し | 一時ファイルを保存するディレクトリのパスを返す |
| topenv | envir | 現在のenvironmentのトップレベルの親 |
System関連の関数
Rにはシステムの情報に関する関数が数多く備わっています。多くの関数はsystemやSys.から始まる名前で設定されています。
システム関連の関数の多くはbaseパッケージでサポートされています。このページでは、以下に示したシステム関連の関数について簡単に説明していきます。
ファイルのパスを返す関数
まずはファイルやプログラム、パッケージのパスを返す関数から説明します。R.home関数はRのプログラムが保存されているパスを返す関数です。
Rプログラムのパスを返す:R.home
# Rのプログラムの保存場所を返す
R.home()[1] "C:/PROGRA~1/R/R-45~1.2"
ライブラリ、つまりパッケージの保管場所のパスを返すのが.libPaths関数です。
ライブラリのパスを返す:.libPaths
[1] "C:/Program Files/R/R-4.5.2/library"
パッケージのパスを返す関数がfind.packageです。find.packageはパッケージの名前の文字列を引数に取り、そのパッケージのパスを返します。
パッケージのパスを返す:find.package
find.package("base")[1] "C:/PROGRA~1/R/R-45~1.2/library/base"
path.package関数もfind.packageと同じくパッケージのパスを返す関数です。
パッケージのパスを返す:path.package
path.package("base")[1] "C:/PROGRA~1/R/R-45~1.2/library/base"
似たような関数として、system.file関数があります。引数なしで指定するとbaseパッケージのパス、package引数を指定すると指定したパッケージのパスを返します。
パッケージのパスを返す:system.file
[1] "C:/PROGRA~1/R/R-45~1.2/library/base"
system.file(package = "BH")[1] "C:/Program Files/R/R-4.5.2/library/BH"
システムのツールに関するパスを表示するための関数がSys.which関数です。以下の例ではping(ネットワークの通信確認に関するツール)の保存場所が表示されます。Rからコマンドプロンプトに文字列としてコマンドを指定し、実行する関数であるsystemやsystem2に渡すとpingの使いかたが表示されます。system関数の引数にargsを設定すればargsに指定したオプションに従い実行することもできます。
Sys.which("ping") ping
"C:\\WINDOWS\\SYSTEM32\\ping.exe"
# Sys.which("ping") |> system2(args = "-c") # argsにオプションを指定する一時ファイルのパスや、一時ファイルを保存するディレクトリのパスを返す関数がtempfile・tempdirです。パッケージなどで一時ファイルを作成したい場合にこのディレクトリを用いてファイルを取り扱うのだと思います。
glob:ワイルドカードを用いてファイルのパスを調べる。
glob(グロブ)とは、ワイルドカード(正規表現のように、文字列のマッチングに用いる表現、Wikipedia参照)を用いてファイルの場所や名前を指定するための手法です。Sys.glob関数はこのワイルドカードを利用したファイルのパスを準備し、そのパターンに一致するファイルのパスを返す関数です。
以下の例では、"library"と"R"の文字の間に任意の文字(*で指定)を含めた".rdx"ファイルを検索しています。
Rの情報を表示する関数
System関連の関数には、現在利用しているRの環境などを表示するための関数が多数備わっています。まずはRのバージョンを返す関数、getRversionから紹介します。getRversionはRのバージョンを文字列として返してくれます。
Rのバージョンを返す:getRversion
[1] '4.5.2'
R.versionも同じような関数ですが、Rのバージョンに関するもっと詳細な情報を返してくれます。
$platform
[1] "x86_64-w64-mingw32"
$major
[1] "4"
$minor
[1] "5.2"
$version.string
[1] "R version 4.5.2 (2025-10-31 ucrt)"
言語や時間などのロケール(locale)情報を返す関数がSys.getlocale関数です。Sys.getlocale関数はロケール情報をセミコロン";"で繋いで返すため、stringr::str_split(";")で分割すると見やすく表示することができます。localeを設定するSys.setlocaleという関数もありますが、あまり使うことはないでしょう。
ロケール情報を返す:Sys.getlocale
Sys.getlocale() |> stringr::str_split(";")[[1]]
[1] "LC_COLLATE=Japanese_Japan.utf8" "LC_CTYPE=Japanese_Japan.utf8"
[3] "LC_MONETARY=Japanese_Japan.utf8" "LC_NUMERIC=C"
[5] "LC_TIME=Japanese_Japan.utf8"
# localeを設定する
# Sys.setlocale(category = "LC_ALL", locale = "de")Sys.timezone関数はシステムのタイムゾーンを返す関数です。日本のPCだとGMT-9、グリニッジ標準時間+9時間を示す文字列("Etc/GMT-9")が返ってきます。タイムゾーンの一覧はOlsonNames関数で取得することができます。
タイムゾーンを返す:Sys.timezone
[1] "Etc/GMT-9"
# タイムゾーンの一覧を返す
OlsonNames()[1:3][1] "Africa/Abidjan" "Africa/Accra" "Africa/Addis_Ababa"
システムの環境変数を返す関数がSys.getenvです。環境変数はOSで共有されている情報の一つで、システムに関わる情報をソフトウェアなどから読み出せるようにしています。環境変数には環境名と値があり、環境名(以下の例では__COMPAT_LAYERやRunAsAdmin)と値("C:\\WINDOWS"やC:\ProgramData)が紐づけされています。
Sys.getenvに環境名を引数として指定すると、特定の環境変数の値を取得することができます。
環境変数を返す:Sys.getenv関数
Sys.getenv() |> head(2)__COMPAT_LAYER RunAsAdmin
ALLUSERSPROFILE C:\ProgramData
# 環境変数名を指定して値を得る
Sys.getenv("windir")[1] "C:\\WINDOWS"
セッションの情報を表示する関数がsessionInfoです。セッションの情報、つまりRの実行環境を表示する時に用います。Rでコードの実行例を示す場合や、このテキストのようなQuartoを実行し、公開する場合には、どのような環境で実行したのか分かるようにsessionInfoを実行した結果を示すことが多いです。
セッションの情報を表示する:sessionInfo
R version 4.5.2 (2025-10-31 ucrt)
Platform: x86_64-w64-mingw32/x64
Running under: Windows 11 x64 (build 22631)
Matrix products: default
LAPACK version 3.12.1
locale:
[1] LC_COLLATE=Japanese_Japan.utf8 LC_CTYPE=Japanese_Japan.utf8
[3] LC_MONETARY=Japanese_Japan.utf8 LC_NUMERIC=C
[5] LC_TIME=Japanese_Japan.utf8
time zone: Etc/GMT-9
tzcode source: internal
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] readxl_1.4.5 lubridate_1.9.4 forcats_1.0.1 stringr_1.6.0
[5] dplyr_1.1.4 purrr_1.2.1 readr_2.1.6 tidyr_1.3.2
[9] tibble_3.3.0 ggplot2_4.0.1 tidyverse_2.0.0
loaded via a namespace (and not attached):
[1] gtable_0.3.6 jsonlite_2.0.0 compiler_4.5.2 tidyselect_1.2.1
[5] scales_1.4.0 fastmap_1.2.0 R6_2.6.1 generics_0.1.4
[9] knitr_1.51 htmlwidgets_1.6.4 pillar_1.11.1 RColorBrewer_1.1-3
[13] tzdb_0.5.0 rlang_1.1.7 stringi_1.8.7 xfun_0.55
[17] S7_0.2.1 otel_0.2.0 timechange_0.3.0 cli_3.6.5
[21] withr_3.0.2 magrittr_2.0.4 digest_0.6.39 grid_4.5.2
[25] rstudioapi_0.17.1 hms_1.1.4 lifecycle_1.0.5 vctrs_0.6.5
[29] evaluate_1.0.5 glue_1.8.0 cellranger_1.1.0 farver_2.1.2
[33] rmarkdown_2.30 tools_4.5.2 pkgconfig_2.0.3 htmltools_0.5.9
実行環境のシステム(PCやOS)の情報を表示する関数がSys.infoです。OSに依存した関数の実行を担保する場合などに利用するのだと思いますが、あまり使われているのを見たことはありません。
システムの情報を表示する:Sys.info
Sys.info() |> _[1:2] sysname release
"Windows" "10 x64"
システムの文字、数値の表示法、貨幣単位などを表示する関数がSys.localeconvです。国によって小数点がピリオドやコンマで異なっていたり、貨幣単位や貨幣を意味するシンボル($や¥)が異なるため、システムで表示方法が指定されています。返り値の詳細についてはWindowsのC++のヘルプに詳しく記載されています。
システムの文字、数値の表示法、貨幣単位を表示する:Sys.localeconv
decimal_point thousands_sep grouping int_curr_symbol
"." "" "" "JPY"
currency_symbol mon_decimal_point mon_thousands_sep mon_grouping
"¥" "." "," "\003"
positive_sign negative_sign int_frac_digits frac_digits
"" "-" "0" "0"
p_cs_precedes p_sep_by_space n_cs_precedes n_sep_by_space
"1" "0" "1" "0"
p_sign_posn n_sign_posn
"3" "3"
現在ロードされているパッケージとオブジェクトの一覧を表示するのがsearch関数です。searchpathsという似た名前の関数はロードされているパッケージと変数のパスを返します。
[1] ".GlobalEnv" "package:readxl" "package:lubridate"
[4] "package:forcats" "package:stringr"
searchpaths() |> head(2)[1] ".GlobalEnv"
[2] "C:/Program Files/R/R-4.5.2/library/readxl"
最後に宣言した値を返すのが.Last.valueです。.Last.valueは関数ではなく変数のように取り扱います。
最後に呼び出した値を返す:.Last.value
.Last.valueNULL
Rのライセンスを表示するための関数がlicenseです。licenceというスペル違いの関数もあります。Rを起動するときに表示される文にはlicenseに加えて、contributors、citationなどの関数の記載があります。
Rのライセンス情報を表示する
license()environmentに関する関数
Rにはenvironmentというものが設定されています。このenvironmentというのは、スコープと名前空間などを合わせたようなもので、通常は44章で紹介したスコープとして理解するのがよいかと思います。environmentの詳細についてはR言語徹底解説(Wickham 2016)やAdvanced R(Wickham 2019)に詳細に説明されているので、一読されるとよいでしょう。
現在のenvironmentを返す関数がenvironmentです。Rでenvironment関数を実行すると、R_GlobalEnv、グローバルスコープが返ってきます。関数の中でenvironment関数を実行すると、environmentのIDに当たる数値が返ってきます。これは、関数の中はグローバルスコープではなく、ローカルスコープであることを意味しています。
また、.GlobalEnvはグローバルスコープに関する環境を返す関数です。
environment
# 普通に実行するとグローバルスコープ(R_Grobalenv)が返ってくる
environment()<environment: R_GlobalEnv>
# 関数の中はローカルスコープなので、R_GlobalEnvとは異なる値が返ってくる
f <- function(x){environment()}
f()<environment: 0x0000019f8ed63278>
# これはグローバルスコープに関するenvironmentを返す変数
.GlobalEnv<environment: R_GlobalEnv>
topenv関数はそのenvironmentの最も親に当たるenvironment、要はGrobalEnvを返す関数です。environmentには親・子の関係があり、GrobalEnvが最も親の、関数内のローカルスコープが子の関係にあります。
最上位のenvironmentを返す:topenv
topenv(.GlobalEnv) <environment: R_GlobalEnv>
parent.frame関数は現在のenvironmentの親を表示する関数です。n引数で何段階の親environmentを表示するかを指定することができます。以下の例では、function内はローカルスコープで、その一つ親のenvironment、つまりGrobalEnvが返ってきています。
現在のenvironmentの親を返す:parent.frame
f <- function(x){
parent.frame(n = 1)
}
f(1)<environment: R_GlobalEnv>
get関数は関数に関するenvironmentと名前空間を表示する関数です。mean関数はbaseパッケージの関数ですので、environmentとしてnamespace:baseが示されます。また、返り値には関数の設定も含まれます。mean関数はほぼUseMethodだけの関数で、stringr::str_c関数では関数の内容が返ってきていることがわかります。
関数のenvironmentを表示する:get
get("mean")function (x, ...)
UseMethod("mean")
<bytecode: 0x0000019f8406d5e0>
<environment: namespace:base>
function (..., sep = "", collapse = NULL)
{
check_string(sep)
check_string(collapse, allow_null = TRUE)
dots <- list(...)
dots <- dots[!map_lgl(dots, is.null)]
vctrs::vec_size_common(!!!dots)
inject(stri_c(!!!dots, sep = sep, collapse = collapse))
}
<bytecode: 0x0000019f8fb3a998>
<environment: namespace:stringr>
sys.call、sys.frame、sys.parentsは何をやっているのかいまいちわからない関数です。
sys.callは関数の呼び出し(call)を返す関数です。sys.frameは呼び出された場所のenvironentを返す関数、sys.parentsは親environmentを返す関数です。
sys.call・sys.frame・sys.parents
sys.call()eval(expr, envir)
<environment: R_GlobalEnv>
[1] 0 1 2 3 4 5 5 5 5 9 10 11 12 13 12 15 16 17 18 19 18 21 22 16 24
[26] 25 24 16 16 29
2重にネストした関数でsys.call、sys.frame、sys.parentsを呼び出してみます。sys.callは呼び出した関数の定義と関数内のenvironmentを返しています。
function (x)
{
print(sys.call())
}
<environment: 0x0000019f903c1bd8>
sys.frameは呼び出した関数の定義と関数内のenvironmentを返しています。
function (x)
{
print(sys.frame())
}
<environment: 0x0000019f88219970>
sys.parentsでは関数の定義と親environment(1つ目のfunctionのenvironment)が返ってきます。
親environmentを返す:sys.parents
f <- function(x){
function(x){
sys.parents()
}
}
f(1)function (x)
{
sys.parents()
}
<environment: 0x0000019f87c1e780>
上記のsys.call、sys.frame、sys.parentsを一度に呼び出す関数がsys.status関数です。
sys.status関数
# Quartoの実行時に利用するとsys.callの返り値が長くなるため、実行していません
sys.status()名前空間(name space)に関する関数
名前空間は、そのenvironmentで用いられる変数や関数の名前の一覧をまとめたものです。変数や関数の名前が重複すると演算がうまくいかないのは理解しやすいかと思います。この名前の重複などをなくすために、Rでの名前空間はenvironmentごとに設定されています。Rでの名前空間のenvironmentとして、グローバルのenvronment(GrobalEnv)、ローカルスコープのenvironmentに加えて、パッケージのenvironmentが準備されています。
loadedNamespacesはロードしたパッケージの名前空間を文字列で返す関数です。グローバルやローカルスコープに関する名前空間は表示されません。
ロードしたパッケージの名前空間:loadedNamespaces
[1] "gtable" "jsonlite" "dplyr" "compiler" "stats"
[6] "tidyselect" "tidyverse" "stringr" "tidyr" "scales"
[11] "readxl" "fastmap" "base" "ggplot2" "readr"
[16] "R6" "generics" "knitr" "forcats" "htmlwidgets"
[21] "datasets" "methods" "tibble" "lubridate" "pillar"
[26] "RColorBrewer" "tzdb" "rlang" "stringi" "xfun"
[31] "utils" "S7" "otel" "timechange" "cli"
[36] "withr" "magrittr" "digest" "grid" "rstudioapi"
[41] "graphics" "hms" "lifecycle" "vctrs" "evaluate"
[46] "glue" "cellranger" "farver" "rmarkdown" "purrr"
[51] "grDevices" "tools" "pkgconfig" "htmltools"
getNamespace関数は個別のロードしたパッケージの名前空間を返す関数です。ロードしたパッケージの名前空間はenvironmentとして設定されています。
パッケージの名前空間を返す:getNamespace
getNamespace("base")<environment: namespace:base>
日時に関する関数
日時に関するsystem関連の関数には、Sys.sleep、Sys.Date、Sys.time、system.timeなどがあります。いずれも21章ですでに紹介したものですが、このTipsでも紹介します。
Sys.sleepは指定した数値の秒数だけ演算を止める(スリープする)ための関数です。以下の例では、1秒間演算がスリープすることになります。
Sys.sleep関数
Sys.sleep(1) # 1秒 演算をスリープするSys.DateとSys.timeはシステムの時間を返す関数です。Sys.Dateは日付、Sys.timeは日時を返します。
system.timeは演算(expr)を引数に取り、演算にかかる時間を計算してくれる関数です。
演算にかかる時間を返す:system.time
system.time(for(i in 1:100) mean(runif(1000))) user system elapsed
0 0 0
ディレクトリ・ファイルに関する関数
| 関数名 | 引数 | 返り値 |
|---|---|---|
| dir.create | ディレクトリ名 | 新しいディレクトリ(フォルダ)を作成する |
| dir.exists | ディレクトリ名 | ディレクトリが存在すればTRUE |
| file.append | 元のファイル、追加するファイル | ファイルの中身を追加する |
| file.copy | コピー元、コピー先のファイル名 | ファイルをコピーする |
| file.create | ファイル名 | ファイルを作成する |
| file.exists | ファイル名 | ファイルがあるかどうかを論理型で返す |
| file.info | ファイル名 | ファイルの情報を返す |
| file.link | ファイル1、ファイル2 | ファイルのハードリンク |
| file.remove | ファイル名 | ファイルを削除する |
| file.rename | ファイル名、新しいファイル名 | ファイル名を変更する |
| file.show | ファイルのパス、ファイル名 | ファイルを開いて表示する |
| find.package | パッケージ名 | パッケージの保存場所のパスを表示する |
ファイルの操作
file.existsは現在のワーキングディレクトリに特定のファイルが存在するかどうかを論理型で返す関数です。dir関数などでもファイルがあるかどうかを確認できますが、特定のファイルが存在しているかどうかチェックする必要があればこちらを用いた方がよいでしょう。
ファイルの存在を確認する:file.exists
file.exists("Tips_systems.qmd")[1] TRUE
file.infoはファイルの情報を返す関数です。UNIXベースのOS(Linux、MacOS)とWindowsでは少し表示される項目が異なります。
ファイルの情報を確認する:file.info
file.info("Tips_systems.qmd") |> _[, 1:6] size isdir mode mtime ctime
Tips_systems.qmd 29636 FALSE 666 2026-04-18 23:44:30 2026-03-29 13:17:35
atime
Tips_systems.qmd 2026-04-19 08:23:20
Sys.setFileTimeはファイルの更新日時を変更するための関数です。mtime(更新日時)とatime(最終アクセス日時)の両方が更新され、ctime(最後にステータスが変更された日時)は変更されない仕様になっています。
ファイルの更新日時を変更する:Sys.setFiletime
file.info("favicon.ico") |> _[, 1:5] size isdir mode mtime ctime
favicon.ico 20296 FALSE 666 2026-04-18 23:46:20 2025-05-31 09:15:19
Sys.sleep(5)
# text1.txtのファイル更新時間を設定
Sys.setFileTime("favicon.ico", Sys.time())
file.info("favicon.ico") |> _[, 1:5] size isdir mode mtime ctime
favicon.ico 20296 FALSE 666 2026-04-19 08:23:28 2025-05-31 09:15:19
空のファイルを作成する場合にはfile.create、ファイル名の変更にはfile.rename、ファイルを削除するときにはfile.remove関数をそれぞれ用います。
ファイルの作成・名前の変更・削除
# 引数に取った文字列の名前が付いたファイルを作成
file.create("./tmp/temp.txt")[1] TRUE
# 第一引数で指定したファイル名を第二引数の文字列に変更
file.rename("./tmp/temp.txt", "./tmp/test.txt") [1] TRUE
# 文字列で指定したファイルを削除する
file.remove("./tmp/test.txt")[1] TRUE
17章で少し紹介した通り、cat関数を用いると文字列をテキストファイルとして保存することができます。以下では、text1.txtとtext2.txtという2つのファイルを作成しています。
file.appendはあるファイルから別のファイルに中身を追加することができる関数です。text1.txtには「text1」、text2.txtには「text2」が記録されています。以下の例では、text1.txtにtext2.txtの内容が追加され、text1に「text1text2」が記録されます。file.append自体はRでは追加が成功したらTRUEを返します。
ファイルに別ファイルの内容を追加する:file.append
# 「text1」を記録したtext1.txtを作成する
cat("text1", file="./tmp/text1.txt")
# 「text2」を記録したtext2.txtを作成する
cat("text2", file="./tmp/text2.txt")
# text1.txtにtext2.txtの内容を追記する
file.append("./tmp/text1.txt", "./tmp/text2.txt")[1] TRUE
file.showはファイルを開く関数、file.copyはファイルをコピーする関数です。file.copyでは第一引数で指定したファイルを第二引数で指定した名前のファイルとしてコピーします。
ディレクトリの操作
17章でも紹介していますが、ディレクトリ(フォルダ)を作成する場合には、dir.create関数を用います。また、現在のワーキングディレクトリに特定のディレクトリが存在しているかどうかはdir.exist関数で評価できます。
ディレクトリの作成と確認
# testディレクトリを作成
dir.create("./tmp/test")
# testディレクトリが存在していたらTRUEが返ってくる
dir.exists("./tmp/test")[1] TRUE
ファイルへのアクセスに関する関数
ファイルの読み込み・書き出しについては17章ですでに説明していますが、Rではファイルを開く・閉じる等の操作をしなくてもファイルを取り扱うことができる多数の関数を備えています。
ココではもう少しプリミティブな、C言語でのファイル読み込み、書き込みに近いような関数について簡単に説明します。17章で紹介した関数群と比べると使い勝手がよいとは言えませんが、他のプログラミング言語でのファイルの取り扱いに似ているため、他のプログラミング言語を学ぶ時や、パッケージを作成する際には役に立つこともあるでしょう。
まずはファイルへのアクセス(connections)に関連する関数の一覧を以下の表に示します。
| 関数名 | 引数 | 返り値 |
|---|---|---|
| file | description、open | ファイルを開く |
| url | description、open | URLで指定されたファイルを開く |
| gzfile | description、open | 圧縮ファイルを作成する(gzip) |
| bzfile | description、open | 圧縮ファイルを作成する(bzip2) |
| xzfile | description、open | 圧縮ファイルを作成する(xz/lzma) |
| zstfile | description、open | 圧縮ファイルを作成する(xz/zstd) |
| unz | description、filename | zipファイルをバイナリで開く(read only) |
| pipe | description、open | 読み出しと書き込みを繋ぐ(Cのpipe) |
| fifo | description、open | 先入れ先出し(FIFO)のconnectionを作成する |
| socketConnection | host、port | 一時的な(temporary)ソケット通信を作成する |
| serverSocket | port | 待機(listening)ソケット通信を作成する |
| socketAccept | socket | listening server socketを受け入れる |
| open | con | connectionを開く |
| close | con | connectionを閉じる |
| flush | con | 書き込みを実際に行う |
| isOpen | con | connectionが開いているかどうかを返す |
| isIncomplete | con | 書き込みが完了したかどうかを返す |
| socketTimeout | socket | socket connectionのタイムアウトの値を返す |
| Sys.chmod | ファイルのパス、mode | ファイルのpermissionを変更する |
| file.syslink | ファイル1、ファイル2 | ファイルのハードリンク |
| stdin | 無し | 標準入力を表示する |
| stdout | 無し | 標準出力を表示する |
| stderr | 無し | エラー出力を表示する |
| showConnections | all | 標準入出力・開いているコネクションをすべて表示する |
まずはfile関数から紹介します。file関数は作成済みのファイルを指定し、そのファイルへのconnectionクラスのオブジェクトを作成するための関数です。file関数はそれだけではファイルを操作することはできませんが、catなどの関数でそのconnectionを指定することでそのファイルへ書き込み・読み込みができます。
ファイルへのconnectionを作成する:file
temp1 <- file.create("./tmp/temp.txt")
con_temp1 <- file("./tmp/temp.txt", "w")file関数はファイルへのパスの他にopenという引数を取ります。このopenは、ファイルを読み込むか(read)、ファイルに書き込むか(write)、ファイルに追記するか(append)のうちの3つから選択し、ファイルを開く方法を指定するためのものです。また、特にWindowsでは、ファイルの読み込み・書き込みをテキストで行うか(text)、バイナリで行うか(binary)を指定することも重要となります。
open引数は文字列でファイルの開き方を指定します。open引数に取れる文字列は以下の表の通りです。
| モードの名前 | 意味 |
|---|---|
| r / rt | 読み込み(テキスト) |
| w / wt | 書き込み(テキスト) |
| a / at | 追記(テキスト) |
| rb | 読み込み(バイナリ) |
| wb | 書き込み(バイナリ) |
| ab | 追記(バイナリ) |
| r+ / r+b | 読み込み+書き込み |
| w+ / w+b | 読み込み+書き込み(始めにファイルを空にする) |
| a+ / a+b | 読み込み+追記 |
file関数の返り値はconnectionクラスのオブジェクトです。返り値を入力すると開いているファイルの情報が返ってきます。
file関数の返り値:connectionクラス
# 変数をそのまま宣言すると、connectionの情報が返ってくる
con_temp1A connection with
description "./tmp/temp.txt"
class "file"
mode "w"
text "text"
opened "opened"
can read "no"
can write "yes"
# クラスはconnection
class(con_temp1)[1] "file" "connection"
このconnectionオブジェクトをcat関数やwrite関数のfile引数、writeLines関数のcon引数に指定することで、文字列をそのファイルに書き込むことができます。
connectionを用いる
cat("connectionの使い方", file = con_temp1)
writeLines("file引数やcon引数に指定する", con = con_temp1)17章で説明した通り、cat関数やwrite関数はファイル名を指定して実行すればconnectionを利用しなくてもファイルに書き込めます。
writeLinesはconnectionを指定しないとファイルへの書き込みができません。con引数を指定しない場合、コンソールに第一引数に指定した文字列が表示されます。
書き込みが終わったら、connectionを閉じる必要があります。connectionを閉じる時には、close関数を用います。
connectionを閉じる:close関数
close(con_temp1)
# connectionオブジェクトは残っているが、閉じている
con_temp1A connection, specifically, 'file', but invalid.
開いているconnectionを表示する関数がshowConnections関数です。showConnections関数を実行すると、stdin(標準入力)、strout(標準出力)、stderr(標準エラー出力)の3つに加えて、開いているconnectionが表示されます。
標準入力・標準出力・標準エラー出力の3つはRでの通常の入力、出力、エラーの出力を表すもので、標準入力はキーボード入力、標準出力・標準エラー出力はConsoleを意味しています。
connectionを表示する:showConnections
con_temp1 <- file("./tmp/temp.txt", "w")
showConnections(all = TRUE) description class mode text isopen can read can write
0 "stdin" "terminal" "r" "text" "opened" "yes" "no"
1 "stdout" "terminal" "w" "text" "opened" "no" "yes"
2 "stderr" "terminal" "w" "text" "opened" "no" "yes"
3 "" "file" "w+b" "binary" "opened" "yes" "yes"
4 "./tmp/temp.txt" "file" "w" "text" "opened" "no" "yes"
ファイルを閉じてからshowConnections関数を実行すると、標準入力・標準出力・標準エラー出力のみが表示されます。
connectionを閉じた場合
close(con_temp1)
showConnections(all = TRUE) description class mode text isopen can read can write
0 "stdin" "terminal" "r" "text" "opened" "yes" "no"
1 "stdout" "terminal" "w" "text" "opened" "no" "yes"
2 "stderr" "terminal" "w" "text" "opened" "no" "yes"
3 "" "file" "w+b" "binary" "opened" "yes" "yes"
上記の標準入力、標準出力、標準エラー出力はそれぞれstdin、stdout、stderrの3つの関数で表示することができます。
標準入力・標準出力・標準エラー出力
stdin()A connection with
description "stdin"
class "terminal"
mode "r"
text "text"
opened "opened"
can read "yes"
can write "no"
stdout()A connection with
description ""
class "file"
mode "w+b"
text "binary"
opened "opened"
can read "yes"
can write "yes"
stderr()A connection with
description "stderr"
class "terminal"
mode "w"
text "text"
opened "opened"
can read "no"
can write "yes"
Sys.chmodはファイルのpermission、上で説明したファイルの開き方や変更できるユーザーなどを指定するための関数です。Sys.chmodはファイルへのパス(paths)とmodeの2つの引数を取ります。modeは数字の文字列で指定するのですが、この文字列の指定はUNIXでのfile permissionに従います。同様にumaskというものを指定するSys.umaskという関数もあります。
ファイルのpermissionを変更する:Sys.chmod
# ファイルのpermissionを変更する関数
Sys.chmod(paths = "./test1.txt", mode = "777")シンボリックリンクとハードリンク
シンボリックリンク・ハードリンクはファイルに別の名前を付けることを指す言葉です。すでに存在するファイルに、別名をつけることで、別名でも取り扱うことができるようにします。
シンボリックリンクとハードリンクの違いは、元のファイル名を参照しているのか、元のファイルを参照しているのかの違いです。ですので、元のファイル名がなくなった場合には、シンボリックリンクではファイルを参照できないのに対して、ハードリンクではファイルを参照することができます。詳しくはこのZennの記事(ハードリンクとシンボリックリンクを説明できるようになる)をご参照下さい。
Rでは、file.symlinkがシンボリックリンク、file.linkがハードリンクを行うための関数です。いずれも第二引数のファイルを第一引数の文字列で参照できるようにします。
シンボリックリンクとハードリンク
# シンボリックリンクのための関数
file.symlink("text1.txt", "text2.txt")
# ハードリンクのための関数
file.link("text1.txt", "text2.txt")ファイルのダウンロード
Webからデータをダウンロードする場合には、download.file関数を用います。download.fileは第一引数にアドレス(url)、第二引数にダウンロードしたファイルの名前を指定します。
download.fileでは、UnixベースのOSでは特に指定がなくてもファイルをダウンロードし、開くことができるのですが、Windowsではmode引数をバイナリ(mode = "wb")に指定しないとうまくファイルを開くことができません。
これは、Unixではダウンロードしたファイルがテキストなのかバイナリなのかを自動的に判別してくれるのに対し、Windowsでは何も指定しないとテキストとして保存してしまうためです。Windowsでは、テキストファイルをダウンロードする場合以外には、バイナリをダウンロードする指定であるmode = "wb"を指定する必要があります。
ファイルをダウンロードする:download.file
link <- "https://catalog.lib.kyushu-u.ac.jp/opac_download_md/4843901/0102_p041.pdf"
# modeの指定がない場合、Windowsではテキストとして読み込むので開けなくなる
# download.file(link, destfile = "./tmp/0102_p041.pdf")
# binaryとして読み込むと開くことができる
download.file(link, destfile = "./tmp/0102_p041.pdf", mode = "wb")オブジェクトのファイルサイズを調べる
オブジェクトのファイルサイズを調べる場合、object.size関数を用います。あまり使うことはないかもしれませんが、巨大な解析後のデータを取り扱う際にメモリを越えないようモニタリングする際などには使えるかもしれません。
オブジェクトのファイルサイズを調べる:object.size
object.size(f)1120 bytes
[1] TRUE TRUE TRUE TRUE