要复制该问题,请首先创建一个脚本文件并使用以下命令将其来源:
Mathtest1 <- function (array1, mult)
{
a1 = array1
a2 = a1 * mult
a3 = a2 + a1
a4 = a3 - a1
a5 = a4 * mult
return(a5)
}
然后将此文件作为来源(保存时以任何方式获取)
然后从另一个cript文件或控制台运行以下内容。
c1 = c(1:10)
c2 = c1
c2 = Mathtest1(c1,2)
print(c2)
输出应为:
c2 = Mathtest1(c1,2)
> print(c2)
[1] 4 8 12 16 20 24 28 32 36 40
现在在Mathtest1函数的任何地方创建一个断点,并调试源(或不调试)。
现在,如果您使用Ctrl-Enter或控制台运行文件中的5行,我会得到:
> c2 = Mathtest1(c1,2)
Called from: eval(expr, p)
Browse[1]> print(c2)
[1] 1 2 3 4 5 6 7 8 9 10
Browse[1]> n
debug at ~/RStudio/Test1/Test1.R#5: a4 = a3 - a1
Browse[2]>
我希望在休息后函数竞争后,输出相同的打印结果。
问题在于它在c2 = Mathtest1(c1,2)行完成之前执行了print(c2)行。
如果脚本文件是源文件,那么它确实会在完成之前等待断点完成。因此,问题完全出在控制台或Ctrl-Enter上,这使得调试几乎变得不可能。
R 3.5.3和3.6.1与Rstudio 1.2.1335一起发生,以前没有发生。
我不知道如何在Rgui中创建断点,因此很遗憾,我无法测试Rgui是否显示相同的行为。
有什么办法可以始终强制执行订单吗?