niszetの日記

アナログCMOS系雑用エンジニアが頑張る備忘録系日記

(R) R-wakalangで質問してみた。あるいはパッケージ内の関数の一覧を得る方法について

初の投稿...ども...

来週のTokyoRにてyutannihilationさんがwakalangについて発表すると聞き、そういえば僕はちゃんとここで質問したことがなかったなぁ…と思って、気になっていたことを質問してみました1

様子

こんな感じです。

f:id:niszet:20180223215752p:plain

めちゃくちゃリプライが早い…!(わずか3分…。)

国内のトップRユーザの方々からこんなに簡単にコメントいただけるなんて…すごい場所ですね…。

ワタシも結構しり込みしていたのでわかるのですが、習うより慣れよですね。とはいえ、どういう感じに質問すればよいの…?みたいなものはありますよね…

わからないことを呟いてみよう。

そんなわけで、yutannihilationさんがRワカラングのわからないことを募集?中です。ask.fm(下記の記事をさかのぼるとリンクがあるはず)や、タグをつけて呟いてみましょう!

私は、

  • 寿司をつける方法がわからなかった
  • コードを添付するには??
  • 文中のコードハイライトは…?

みたいなことが良く分かりませんでしたね…。それぞれ、なんかslackポチポチ触ってたらそれらしきものが見つかったりしたので少しだけわかりましたが…。

質問の答えについて

hoxo_mさんに教えていただいたのはこのやり方。

ls(envir = asNamespace("package_name"))

この場合はそのパッケージ内に含まれる、エクスポートされていない関数も含めて一覧が得られます。なお、パッケージ名を囲う""は必須です(文字列で渡す)。

# 実行例
> head(ls(envir = asNamespace("fs")))
[1] "!.fs_perms" "%||%"       "&.fs_perms" "[.fs_bytes" "[.fs_path" 
[6] "[.fs_perms"

それとは別経路で(というかtwitterで)kazutanさんに教えていただいたのはこのやり方。

library(fs)
ls("package:fs")
# 以下は実行結果
 [1] "as_fs_bytes"      "as_fs_path"       "as_fs_perms"      "dir_copy"        
 [5] "dir_create"       "dir_delete"       "dir_exists"       "dir_info"        
 [9] "dir_ls"           "dir_map"          "dir_walk"         "file_access"     
[13] "file_chmod"       "file_chown"       "file_copy"        "file_create"     
[17] "file_delete"      "file_exists"      "file_info"        "file_move"       
[21] "file_show"        "file_temp"        "file_temp_pop"    "file_temp_push"  
[25] "fs_bytes"         "fs_path"          "fs_perms"         "group_ids"       
[29] "is_absolute_path" "is_dir"           "is_file"          "is_link"         
[33] "link_copy"        "link_create"      "link_delete"      "link_exists"     
[37] "link_path"        "path"             "path_abs"         "path_common"     
[41] "path_dir"         "path_expand"      "path_ext"         "path_ext_remove" 
[45] "path_ext_set"     "path_ext<-"       "path_file"        "path_filter"     
[49] "path_home"        "path_join"        "path_norm"        "path_real"       
[53] "path_rel"         "path_sanitize"    "path_split"       "path_temp"       
[57] "path_tidy"        "user_ids"        

この場合はエクスポートされている関数のみが得られます。用途に応じて使い分けましょう。どちらも文字列のベクトルとして得ることが出来ます。

conflictsはコード追っかけ中…。これも何かわかったらまとめておこう… github.com

ということで、わからないことはRワカラングで質問してみようというお話でした!

追記

この記事について、技術的な面でもう少し掘り下げた記事をid:yutannihilationさんに書いていただけたので、ls()の挙動についてもう一歩踏み込んだ理解をしたい方はこちらの記事も是非!

notchained.hatenablog.com

Enjoy!!


  1. あらためて見直してみると私の考えていた方法の回りくどさよ…。ls()はbaseの関数なので、これも若者(じゃなくておじさんだけど)のbase離れってやつなのか…。