3

我正在尝试使用 R 打开 RStudio 中使用的 .Rproj 文件。我已经成功使用了下面的代码(这里是从 Ananda偷来的)。但是,打开文件后,从 R 调用的打开 RStudio 的连接不会关闭。 打开 .Rproj 文件后,如何切断这个“连接”?(PS 这还没有在 Linux 或 Mac 上测试过)。

## Create dummy .Rproj
x <- c("Version: 1.0", "", "RestoreWorkspace: Default", "SaveWorkspace: Default", 
    "AlwaysSaveHistory: Default", "", "EnableCodeIndexing: Yes", 
    "UseSpacesForTab: No", "NumSpacesForTab: 4", "Encoding: UTF-8", 
    "", "RnwWeave: knitr", "LaTeX: pdfLaTeX")

loc <- file.path(getwd(), "Bar.rproj")
cat(paste(x, collapse = "\n"), file = loc)

## wheresRStudio function to find RStudio location 
wheresRstudio <- 
function() {
    myPaths <- c("rstudio",  "~/.cabal/bin/rstudio", 
        "~/Library/Haskell/bin/rstudio", "C:\\PROGRA~1\\RStudio\\bin\\rstudio.exe",
        "C:\\RStudio\\bin\\rstudio.exe")
    panloc <- Sys.which(myPaths)
    temp <- panloc[panloc != ""]
    if (identical(names(temp), character(0))) {
        ans <- readline("RStudio not installed in one of the typical locations.\n 
            Do you know where RStudio is installed? (y/n) ")
        if (ans == "y") {
                temp <- readline("Enter the (unquoted) path to RStudio: ")
        } else {
            if (ans == "n") {
                stop("RStudio not installed or not found.")
            }
        }
    } 
    temp
}

## function to open .Rproj files
open_project <- function(Rproj.loc) {
    action <- paste(wheresRstudio(), Rproj.loc)
    message("Preparing to open project!")
    system(action)
}


## Test it (it works but does no close)
open_project(loc)
4

1 回答 1

5

目前尚不清楚您到底要做什么。你所描述的对我来说听起来并不像“连接”——它是一个system电话。

认为您得到的是,在您open_project(loc)在上面的示例中运行之后,在您关闭由您的函数打开的 RStudio 实例之前,您不会得到 R 提示。如果是这种情况,您应该添加wait = FALSE到您的system通话中。

您可能还需要在ignore.stderr = TRUE其中添加一个以直接返回提示。我在我的 Ubuntu 系统上收到一些关于“QSslSocket:无法解析 SSLv2_server_method”的错误,在我点击“输入”后,它让我回到了提示符。ignore.stderr可以绕过它(但也可能意味着在严重错误的情况下用户不会得到有意义的错误)。

换句话说,我会将您的open_project()功能更改为以下内容,看看它是否符合您的预期:

open_project <- function(Rproj.loc) {
    action <- paste(wheresRstudio(), Rproj.loc)
    message("Preparing to open project!")
    system(action, wait = FALSE, ignore.stderr = TRUE)
}
于 2013-08-25T09:18:08.820 回答