我正在使用R studio.
有没有办法知道R脚本是由控制台中的源命令直接运行还是在另一个脚本中运行.即.另一个脚本来源,这可以调用第一个脚本.
在某些情况下,这对于提示某些值很有用.
我现在正在做的是将变量设置为true或false,并在脚本中检查该变量.这有效,但自动方式更好.
谢谢你的时间.
假设我有一个运行良好的独立脚本,但是这个脚本是另一个脚本完成后运行的进程的一部分.如果我必须同时运行,我可以运行第一个,然后运行第二个; 但我也有机会跑第二个.
我要问的是,是否有办法(在第二个脚本中)验证第二个是从第一个调用还是从第二个调用.
看看他的简单例子(灵感来自Greg Snow的回答).首先是我在Rstudio中调用的文件
# scripta.R
writeLines("script A")
if (interactive()) writeLines("interactive: true") else writeLines("interactive false")
source("scriptb.r")
writelines("after B")
Run Code Online (Sandbox Code Playgroud)
然后该文件被采购
# scriptb.R
writeLines("script B")
if (interactive()) writeLines("interactive: true") else writeLines("interactive false")
writeLines("end B")
Run Code Online (Sandbox Code Playgroud)
Rstudio的结果是
script A
interactive: true
script B
interactive: true
end B
after B
Run Code Online (Sandbox Code Playgroud)
我喜欢有类似的东西
script A
interactive: true
script B
interactive: false
end B
after B
Run Code Online (Sandbox Code Playgroud)
我希望现在更清楚了.
谢谢
不是你的问题的直接答案,但相关的是查看interactive功能.TRUE如果R认为您处于交互式会话中并且假设某人可以回答问题是合理的,则该函数将返回,FALSE如果在BATCH模式下运行并且相当确定没有人(或外星人,聪明的动物等)回答问题.
不完全是你问的,但它可能有助于决定是否提示信息.
如果我理解正确,一个简单的message()命令应该可以完成(我认为)你需要的事情。由于您正在基于逻辑检查调用多个脚本之一,因此会在每个脚本的开头回显一条消息,例如:
message("R has now entered script_1.R \n")
应该这样做。如果由于某个变量设置为 而从未调用脚本FALSE,那么您将永远不会看到此消息。
如果您需要提示并从控制台读取值,请插入如下行:
new_input <- readline("Enter a value for x: ")
也会对你有用。