RStudio起動時の.rs.httpdPort()
エラー
先日R3.1.3が公式リリースされました。ミーハーな私としては速攻で入れてみてRStudioを起動させたのですが、起動時に以下のエラーが出るようになりました:
以下にエラー .rs.httpdPort() : 関数でないものを適用しようとしました
ちなみにこのエラー、RStudioで発生しますが通常のRを起動させても出てきません。つまりRStudio側のエラーです。
さすがに起動時にエラーがでるようになったのは初めてだったので調べてみました、というメモというかアピールみたいなものです。
.rs.httpdPortの中身など
> .rs.httpdPort
function ()
{
if (.rs.httpdPortIsFunction())
as.character(tools:::httpdPort())
else as.character(tools:::httpdPort)
}
条件に設定してある関数がわかりませんでした。聞いてみます。
> .rs.httpdPortIsFunction
function ()
{
.rs.haveRequiredRSvnRev(67550)
}
さらに長い関数がでてきました。仕方ないので聞いてみます。
> .rs.haveRequiredRSvnRev
function (requiredSvnRev)
{
svnRev <- R.version$`svn rev`
if (!is.null(svnRev)) {
svnRevNumeric <- suppressWarnings(as.numeric(svnRev))
if (!is.na(svnRevNumeric) && length(svnRevNumeric) ==
1)
svnRevNumeric >= requiredSvnRev
else FALSE
}
else {
FALSE
}
}
どうやらRのバージョンに関することを取得してますね。ちょっと試してみましょう:
> R.version$`svn rev`
[1] "67962"
> R.version
_
platform x86_64-pc-linux-gnu
arch x86_64
os linux-gnu
system x86_64, linux-gnu
status
major 3
minor 1.3
year 2015
month 03
day 09
svn rev 67962
language R
version.string R version 3.1.3 (2015-03-09)
nickname Smooth Sidewalk
なるほど、R.version
というのがあったんですね。(初心者)
要するにRのバージョンチェックをして、それによってtools:::httpdPort()
にするかtools:::httpdPort
を分岐させてるのが、今回問題の.rs.httpdPort()
のお仕事みたいです。
ちなみに、この環境では.rs.httpdPortIsFunction
はこうなってました:
> .rs.httpdPortIsFunction()
[1] TRUE
よって、tools:::httpdPort()
が選択されています。でもどうやらこれがまずいようです。
解決策
なんとRStudio0.98.1103で対策済みでした:
Error with new R 3.1.3 version
そこでRStudio0.98.1103にアップデートしてRStudioを起動させたらエラーが消えました。せっかくなので調べてみたら、.rs.httpdPortIsFunction
が修正されてました:
> .rs.httpdPortIsFunction
function ()
{
getRversion() >= "3.2" && .rs.haveRequiredRSvnRev(67550)
}
近々リリースされるR3.2がらみでのバグっぽいですね。これによって.rs.httpdPort()
ではtools:::httpdPort
が私の環境では選択されるようになって解決したみたいです。こういうのがわかるのも楽しいですね。
まとめ
RStudioのバージョンには気をつけよう。
Enjoy!