Closed kosugitti closed 8 years ago
https://github.com/TokyoR/r-wakalang/issues/8#issuecomment-181270672 を参考にしてください。
ちょっと書き直します
必要なデータを.rdaとしてdataフォルダに保存するのは問題ないはずです。
data/hoge.rda に保存されているオブジェクトはパッケージが読み込まれると参照可能になります(ですので、本来はパッケージの名前空間を指定した方が行儀が良いはず)。
例えば、
a <- 1:3
b <- list(a = 1:4,
b = letters[1:3])
save(a, b, file = "data/hoge.rda")
としてビルド・インストール後はmypkg::a でaの値が呼び出せます(呼び出せてしまう)。
hello <- function() {
return(a)
}
mypkg::hello()
# Error in mypkg:::hello() : object 'a' not found
mypkg::a
# [1] 1 2 3
library(mypkg)
b
# $a
# [1] 1 2 3 4
# $b
# [1] "a" "b" "c"
さらに修正です。
R/sysdata.rda として保存しておけば、ユーザーは参照できないオブジェクトになるみたいです。
a
# Error: object 'a' not found
library(mypkg)
a
# Error: object 'a' not found
# 名前空間を指定すると呼び出せる
mypkg:::a
# [1] 1 2 3
mypkg:::hello()
# [1] 1 2 3
正式なやり方かどうかはわかりませんが、下記のようにすればアクセスできると思います。
readRDS(system.file("extdata", "hoge.rds", package = "mypkg"))
細かいですが、extdata/
は生のデータを置く場所なので、saveRDS()
でシリアライズされたRのデータならdata/
が正しい気がします。
参考:http://r-pkgs.had.co.nz/data.html#data-extdata
data/
とかextdata/
下にあるファイルの参照の仕方は、@hoxo-m さんの書き方をよく見かけますね。
@uribo さんが書いているように、R/sysdata.rda
として保存しておくとパッケージ内では使うけどエクスポートされないデータになります。これはdevtools::use_data(..., internal = TRUE)
とすると簡単に作ることができます。
ありがとうございました! ご紹介いただいた通りのやり方で,解決できました!
幾重にも御礼申し上げます。
解決できましたので,このイシューはこれで閉じさせていただきます。
初めまして。kousgittiといいます。 どこの誰に相談していいものやらわからないことがありましたので,Issueを立てさせていただきました。
現在rstanをつかったパッケージを作っております。 毎回のコンパイルが面倒で,かつ,モデルはほとんど変化しないので,stan_modelでコンパイルしたものを読み込んで使うようにしています。
saveRDS(stanmodel,file)としたものを,関数の中でreadRDS()で読み込みたいのですが,このとき"hoge.rds"ファイルをどこに置いたらいいのかわかりません。 detools::check()に,この手のファイルはinst>extdataにおくようにとご指導いただけるのですが,さてそれを実際にlibrary(mypkg)したときの関数が呼び出そうとすると「そんな場所はねえ!ファイルがねえ!」と叱られてしまいます。
.rdaや.RDataファイルにしてdataフォルダに置いても,パッケージの中の関数で参照できないのは同じで,途方に暮れております。
どうすれば良いか,アドバイスが頂きたく存じます。
DESCRIPTIONファイルやNAMESPACEファイルにも何か仕掛けが必要なんでしょうか。
予備知識が不十分なのは承知の上で,恥を忍んで投稿しております。 「ここ読め」でもいいので教えていただければ幸せます。