LoginSignup
1
1

More than 5 years have passed since last update.

R3.1.3 & RStudio 0.98.1102で発生する".rs.httpdPort()"のエラーについて

Last updated at Posted at 2015-03-12

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!

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1