詳しくお調べいただいてたいへん恐縮です。
本当にありがとうございます。
何が書いてあるかはなんとなくわかるのですが、
なぜそうなるかは半分ぐらい理解できません(笑)
ひとつひとつ試してみました。
Rstudioで動かせるということなので、Exploratoryを入れたときに
一緒に入るR x64 3.6.1でやってみます。
df <- readr::read_csv(Hmisc::getZip(url = “/Users/Username/Downloads/ziptest/a2.zip”, password = “1234”))
guess_header_(datasource, tokenizer, locale) でエラー:
Cannot read file C:/Users/Username/AppData/Local/Temp/RtmpUR3fJx/file49c3a8c30fb: ファイルを格納しているボリュームが外部的に変更されたため、開かれているファイルが無効になりました。
・・・ああそうか、unzip for windows入れてPATH通さないといけないんだよね、ではもう一回。
df <- readr::read_csv(Hmisc::getZip(url = “/Users/Username/Downloads/ziptest/a2.zip”, password = “1234”))
guess_header_(datasource, tokenizer, locale) でエラー:
Cannot read file C:/Users/Username/AppData/Local/Temp/RtmpUR3fJx/file49c3a8c30fb: ファイルを格納しているボリュームが外部的に変更されたため、開かれているファイルが無効になりました。
・・・おや?(^^;
どういうことだろうとコマンドプロンプトで実行してみます。
C:\Users\Username\Downloads\ziptest>unzip -P 1234 a2.zip
Archive: a2.zip
skipping: a2.csv need PK compat. v5.1 (can do v2.1)
マヂか・・・ZIPのバージョンで引っかかったのなんて初めてだな、この結果がR上だとそういうエラーになるのね。。。
つかunzip for windowsはLastChangeが14 February 2005か、5.1まで持ってくるのは難しそうだな・・・
じゃあzipもGNUの使ってみるか、ということでZip for Windowsを入れて
そちらで圧縮したファイルで再チャレンジ。
C:\Users\Username\Downloads\ziptest>unzip -P 1234 a21.zip
Archive: a21.zip
inflating: a2.csv
というわけでコマンドプロンプト上ではunzipでパスワードを展開できる状態であることを確認し、
Rで再度挑戦。
df <- readr::read_csv(Hmisc::getZip(url = “/Users/Username/Downloads/ziptest/a21.zip”, password = “1234”))
Parsed with column specification:
cols(
column1 = col_character(),
column2 = col_double()
)
df
A tibble: 2 x 2
column1 column2
1 C 3
2 D 4
おお、いけた、ということで①はクリア。
で、次に②Exploratory上で試してみます。
Error :
Cannot read file C:/Users/Username/.exploratory/tmp/Rtmp02LBRI/file1b45d2e3e5a: ファイルを格納しているボリュームが外部的に変更されたため、開かれているファイルが無効になりました。
うむむ、やはり同じエラーですね。
ところで、環境変数については、以前オンラインセミナーで質問したことがあり、
Exploratoryのノート では公式に相対パスのサポートはしていませんが、ご利用は可能です!
なお環境変数の利用についてはサポートしていませんので、ご注意ください。
という回答を受けています。
このときはノートで使えるか、と聞いていますが、
Exploratoryの仕組み的にRスクリプトで使うのも変わらないのではないかと思っていて、
そちらを試してみました。
まずRで
setwd (“C:/Users/Username/Downloads/ziptest”)
df <- read.table(text=system(paste0("unzip -P “, 1234, " a21.zip “, “a2.csv”),intern = TRUE),stringsAsFactors=FALSE,header=TRUE,sep=”,”)
df
Archive...a21.zip
1 inflating: a2.csv
system関数で渡したunzipは、PATHが通っているので動いています。
※ちょっとへんなもの作ってますが動くかどうかだけなので気にしない。
Exploratoryで同じことをやってみます。
Error : ‘unzip’ not found
unzip自体が見つけられないようです。
というわけでExploratoryは環境変数PATHを見てない、ということがわかります。
・・・ところで、そうなるとムクムクと湧いてくる疑問は、
PATHを見てなくてみつけられない、というのなら、
setwdのフォルダの中にunzipがおいてあったらどうなるんだろう、ということです。
unzip for windowsのbinの中のファイルをsetwdで設定したフォルダの中において試してみます。
動くんかーい!!!
というわけで動かせないことはない、ということはわかりました。
ただこれを実践するか、というとあまりにもクセが強すぎて微妙なところです(^^;