1

私は、 2 つの目的を持つ.Rprofile次の関数を定義しました。.First

  • 利用可能なライブラリ パスを表示する
  • coloroutRStudio を明るいテーマで実行している場合は、パッケージの設定を変更します

    .First <- function() {
        if (interactive()) {
           cat(
             "\nProcessed RProfile at:",
             date(),
             "\n",
             "Available libraries",
             "\n",
             paste(.libPaths(), collapse = "\n "),
             "\n"
             )
    
        # Check if running bright theme and adjust colour settings
        if (assertive::is_rstudio()) {
            theme_info <- rstudioapi::getThemeInfo()
            if (!theme_info$dark) {
                colorout::setOutputColors(
                    normal = 2,
                    negnum = 3,
                    zero = 3,
                    number = 3,
                    date = 3,
                    string = 6,
                    const = 5,
                    false = 5,
                    true = 2,
                    infinite = 5,
                    index = 2,
                    stderror = 4,
                    warn = c(1, 0, 1),
                    error = c(1, 7),
                    verbose = TRUE,
                    zero.limit = NA
                )
           }
        }
      }
    }
    

問題

ターミナルで実行すると、関数は目的の結果を返します。 ここに画像の説明を入力

ただし、.First関数によって生成されるコンテンツは表示されません。

ここに画像の説明を入力

また、色の設定は適用されないようです。関数をソースして呼び出すと、.First()問題なく動作します。

ターミナルで実行され、同じにアクセスするRセッションと同等の結果が得られないというRStudioの起動の違いを理解したい.Rprofileですか?

4

1 に答える 1

2

まず、関数の本体全体が でラップされていif(interactive()){}ます。interactive関数が返されるためTRUE、コマンド ラインから関数を実行するとコードが実行されます。しかし、.First起動時に が自動的に実行されると、interactive関数は戻り、関数FALSEの本体全体がスキップされます。

Rterm と比較して、RStudio の起動では、セッションがインタラクティブになり始める時期が異なるようです。.Firstの先頭に次のようなコードを配置することで、これをテストできます。

if(interactive()) {
  cat('Interactive is TRUE\n')
} else {
  cat('Interactive is FALSE\n')
}
于 2018-07-11T17:23:37.423 に答える