停止从 运行 提交的代码行

Stop submitted lines of code from running

我正在 运行 编写一个很长的 R 脚本,需要 2 或 3 天才能完成。我不小心 运行 另一个脚本,如果它像 R 通常那样工作,它将进入某个队列,并且 R 会在第一个脚本结束后立即 运行 它。我需要阻止它,因为它会损害第一个脚本的结果。是否有可见的队列或任何其他方式来阻止 R 运行ning 某些代码?

我正在 windows 10.

的 R studio 中进行交互式会话

非常感谢您的帮助!

我猜 OP 有以下问题:

# my big code, running for a long time
Sys.sleep(10); print("hello 1")

# other big code I dropped in console while R was still busy with above code
print("hello 2")

如果是这种情况,我认为无法从 运行 停止第二个进程。

假设您 运行 在控制台(或 R studio 中的交互式会话,这未从您的问题中确定)并且您所做的是获取 script/pasting 代码,而它是 运行正在粘贴另一段代码:

正在进行的是您将数据推入 R 进程输入流,它是一个缓冲输入,因此一旦前一行调用结束并释放进程,它就会 运行 每行。

没有简单的方法来使用输入缓冲区,这是 R 内部 input/output 系统,主要是操作系统,目前缓存中有这些信息。

询问 R 本身是不可能的,因为它已经有这个缓冲区可以读取,任何新的命令都会在后面。

最后的机会:如果您能在控制台中找到另一段代码,您可以尝试按 esc 键停止代码 运行ning.

您可以尝试使用 procexp 来扰乱进程缓冲区,但无论如何都有可能使您的 R 会话出现段错误。

为避免将来出现这种情况,请在命令行上使用脚本和 运行 它们与 Rscript 分开(尽管 link 也存在于 windows 下的 R bin 目录中=] 指向 linux 联机帮助页)。
这将为每个脚本创建一个会话并允许独立地终止它们。也就是说,如果他们都写入同一个地方(数据库,如果两个进程访问一个文件会产生错误),这将无法防止数据损坏。