批处理文件奇怪地在R文件的子部分循环
我的windows桌面上有一个批处理文件批处理文件奇怪地在R文件的子部分循环,r,batch-file,R,Batch File,我的windows桌面上有一个批处理文件test.bat,包含以下内容: cd /d W:\r\dev\ "C:\Program Files\R\R-3.5.0\bin\i386\Rscript.exe" scripts\some_function.R 执行时,被引用的R脚本some_function.R开始运行,并向控制台输出消息,让我知道它在哪里。但是,它在到达R代码中的某个点后停止,然后重新开始并继续这样做,直到会话自动终止 我检查了R代码,寻找批处理文件为什么会继续返回到开头的指示,
test.bat
,包含以下内容:
cd /d W:\r\dev\
"C:\Program Files\R\R-3.5.0\bin\i386\Rscript.exe" scripts\some_function.R
执行时,被引用的R脚本some_function.R
开始运行,并向控制台输出消息,让我知道它在哪里。但是,它在到达R代码中的某个点后停止,然后重新开始并继续这样做,直到会话自动终止
我检查了R代码,寻找批处理文件为什么会继续返回到开头的指示,但没有发现任何指示。直接运行(例如,从R studio内部)时,R文件工作正常
我很清楚这一点,但这不是这里发生的事情。我尝试了批处理文件的多个名称,但这似乎无法解决问题
下面是引用文件中不断重新执行的某些函数.R
中代码的开头:
library(data.table)
dir <- gsub(x= getwd(), pattern = "(.:/r/)(.*)",replacement = "\\1")
envir <- gsub(x= getwd(), pattern = "(.:/r/)(\\w+)",replacement = "\\2")
cat(paste("directory = "),dir,"\n","environment = ",envir,"\n")
##############################################################
# Load System Parameters #
##############################################################
cat("Loading system parameters ...","\n")
sys_param_file_path <- paste0(dir,"shared/files/system/sys_param.csv")
sys_params <- data.table(read.csv(sys_param_file_path, stringsAsFactors = FALSE))
sys_params <- sys_params[param_envir == envir,]
for(i in 1:nrow(sys_params)){
if(sys_params[i,param_type] == "environment path"){
sys_params[i,param_val := paste(dir,envir,param_val,sep = "")]
}
if(sys_params[i,param_type] == "root path"){
sys_params[i,param_val := paste(substr(dir,1,nchar(dir)-1),param_val,sep = "")]
}
}
cat(paste("Loaded",nrow(sys_params),"parameters","\n"))
我遗漏了什么?无论文件中有什么内容,都会发生这种情况吗?如果脚本只有
cat(“Hello”)
它还会重复吗?我无法复制:双击批处理、在PowerShell中运行等。您能设置一个可复制的示例吗?除此之外,代码的其余部分可能会触发重复调用。也许是source()
行?在做了一些调查之后,我将问题缩小到source()
调用,如@Parfait(谢谢!)所示。包含被调用脚本的文件夹中的每个脚本都是源代码,因为此文件夹包含代码所需的脚本。有没有办法不将这个脚本移动到它自己的文件夹(这会稍微扰乱我们的结构)就可以工作?不管文件中有什么,都会发生这种情况吗?如果脚本只有cat(“Hello”)
它还会重复吗?我无法复制:双击批处理、在PowerShell中运行等。您能设置一个可复制的示例吗?除此之外,代码的其余部分可能会触发重复调用。也许是source()
行?在做了一些调查之后,我将问题缩小到source()
调用,如@Parfait(谢谢!)所示。包含被调用脚本的文件夹中的每个脚本都是源代码,因为此文件夹包含代码所需的脚本。有没有办法不将这个脚本移动到它自己的文件夹(这会稍微扰乱我们的结构)就可以工作?
C:\Users\me\Desktop> cd /d W:\r\dev\
W:\r\dev>"C:Program Files\R\R-3.5.0\bin\i386\Rscript.exe" scripts\some_function.R
Warning message:
package 'data.table' was built under R version 3.5.1
directory = W:/r/
environment = dev
Loading system parameters ...
Loaded 32 parameters
directory = W:/r/
environment = dev
Loading system parameters ...
Loaded 32 parameters
directory = W:/r/
environment = dev
Loading system parameters ...
Loaded 32 parameters