我使用RGtk2编写了一个名为Main.R的GUI,当我在RStudio中运行时,它能够完美地运行,但仅在CMD中打开R并源代码后才能工作。我的目标是使其具有完全的可移植性,因此要编写一个.bat文件来运行它。
传统命令R CMD BATCH Main.R和Rscript Main.R均无法正常工作。在这些情况下,窗口被创建后立即关闭,而不是等待用户交互。经过一些研究,我发现只有run R script from .bat (batch file)中的OP(遗憾的是未得到答案)遇到了类似的问题,但我的问题与他的不同,因此我仍然认为我的帖子是合理的。
即使对于我使用相同库制作的非常简单的程序,这些命令也无法正常工作,这表明问题可能是由GTk本身引起的。
在我的批处理文件中,我尝试了以下代码和其他变体:
当然,当R会话被手动关闭时,该文件会执行最后一行。由于R.exe无法接受任何参数,我需要让我的批处理文件在R内部进行输入。有什么方法可以做到吗?
非常感谢任何帮助!
更新:感谢一些评论,我意识到Rscript不会等待任何输入。
传统命令R CMD BATCH Main.R和Rscript Main.R均无法正常工作。在这些情况下,窗口被创建后立即关闭,而不是等待用户交互。经过一些研究,我发现只有run R script from .bat (batch file)中的OP(遗憾的是未得到答案)遇到了类似的问题,但我的问题与他的不同,因此我仍然认为我的帖子是合理的。
即使对于我使用相同库制作的非常简单的程序,这些命令也无法正常工作,这表明问题可能是由GTk本身引起的。
library(RGtk2)
Destroy <- function(button) {
window $ destroy()
}
vbox <- gtkVBoxNew (FALSE, 10, TRUE) #container for the first tab
vbox $ setBorderWidth (10)
label <- gtkLabelNew ("Welcome ! Click on the button to close the window")
vbox $ packStart (label, TRUE, 20, 0)
closeButton <- gtkButtonNewWithLabel("Close")
vbox $ packStart(closeButton, FALSE, FALSE, 0)
gSignalConnect (closeButton , "clicked" , Destroy)
#links the startButton to the Start function
window <- gtkWindow (NULL, FALSE)
window ["title"] <- "Example"
gtkWindowResize(window, 800, 450)
window $ add (notebook)
window $ showAll()
在我的批处理文件中,我尝试了以下代码和其他变体:
@echo off
title OCR GUI
start R.exe & "source("OCR_MR/R/Main.R")"
当然,当R会话被手动关闭时,该文件会执行最后一行。由于R.exe无法接受任何参数,我需要让我的批处理文件在R内部进行输入。有什么方法可以做到吗?
非常感谢任何帮助!
更新:感谢一些评论,我意识到Rscript不会等待任何输入。
readline(prompt="message")
无法工作。可能是在非交互模式下运行交互命令的问题,我会随时更新!
readline(prompt = "Hit Enter to quit: ")
添加到脚本末尾是否可以解决问题? - DasonRscript
,它已经存在了10多年,并且在各个方面都比R CMD BATCH
更好。在Unix上,littler
中的r
也很不错(虽然我是其(共同)作者,因此不免有偏见)。 - Dirk Eddelbuettel