防止 Rstudio 控制台显示脚本命令
Posted
技术标签:
【中文标题】防止 Rstudio 控制台显示脚本命令【英文标题】:Prevent Rstudio console from showing script commands 【发布时间】:2016-05-19 12:54:16 【问题描述】:我正在使用 Rstudio
从 script.R
运行数百个代码行,但与 Matlab
相比让我有点恼火的是 Rstudio
控制台保持机械地显示每个command line
来自我的脚本文件。有没有办法防止这种情况发生?
令人沮丧的部分出现了,例如,当使用sprintf()
时,脚本文件中的命令行与控制台中的sprintf()
混淆了。
最好的,
【问题讨论】:
在获取脚本时不是有两个选项:Source 和 Source with Echo?听起来您正在单击 Source with Echo。我总是点击普通的 Source 并且看不到脚本行。 @drhagen:感谢您强调与Echo
的差异,尽管我没有点击其中任何一个。在编写脚本时,我使用ctrl +a
执行它,然后使用f5
。根据您的反馈,当我点击普通的Source
时,问题是sprintf()
没有出现在控制台中。
那是因为 sprintf 不打印到命令行;它创建一个字符串。如果您逐行运行,REPL 会为您打印裸值以方便您(就像裸 1+1
一样),但获取脚本并不会这样做,它只会丢弃它们。在sprintf
s 周围放置一个print()
。
@drhagen 不,print
也不是真正的工具——message
是。
@drhagen: thx.that 解决了我的问题。最好的。
【参考方案1】:
对此的更新可能对将来的搜索有所帮助,如果您使用 Rstudio 中的“source”按钮(脚本编辑器窗口的右上角),它将默认为“source' 或 'source with echo' 取决于它收到的最后一个键盘输入源。
因此,如果您单击“ctrl+shift+enter”,则每次使用“源”按钮时,它总是会“带回声源”(即将所有脚本命令打印到控制台)。
如果您单击“ctrl+shift+s”,那么每次您随后使用“source”按钮时它都会简单地获取源(即不将脚本命令打印到控制台)。
【讨论】:
【参考方案2】:只需将您希望从控制台抑制的代码行括在 () 之间:
1+1
output looks:
> 1+1
[1] 2
(1+1)
output looks:
> [1] 2
【讨论】:
【参考方案3】:与 Matlab 的 sprintf
一样,R 的 sprintf
只创建一个字符串,它不会将其打印到输出中。* 您必须显式调用 print
函数才能看到任何内容:
print(sprintf("%f", pi)) # prints
一个普通的sprintf
正式创建一个字符串然后丢弃它,因为它没有保存到变量中:
sprintf("%f", pi) # does nothing
但是,这种方法对您有用,因为 REPL(一次运行 R 代码的命令行)违反了丢弃未保存到变量的值的指令,而是打印它们。这是一件方便的事情,可以更轻松地在命令行上工作。您可以键入 1+1
并让它打印 2
,即使 R 脚本通常会默默地丢弃该值。
将文本打印到控制台的其他函数是cat
和message
,它们都略有不同。请参阅他们的帮助文件以了解使用情况。
* 从技术上讲,Matlab 将打印任何未被;
终止的语句的值,包括字符串。因此,如果没有分号,sprintf
产生的字符串可以被打印,尽管它不是由sprintf
直接完成的,而是由 Matlab 的通用 print-all-the-things 行为完成的。在我看来,这是一个奇怪的功能。
【讨论】:
在Matlab
: sprintf('invalidate misunderstanding')
中测试这个并更新你的断言。
@owner 在 Matlab 中测试:1 + 2
。然后测试'invalidate misunderstanding'
。你会看到它也打印了一些东西。然而,1 + 2
和 'invalidate misunderstanding'
显然都不是打印语句。 sprintf
也是如此。【参考方案4】:
使用 ctrl+shift+S
运行您的代码。或者转到script.R
右上角的源代码,然后只运行Source
而不是Source with echo
。而且,对于您打印@Konrad Rudolph 的要求,使用消息message("%f", pi)
的建议是最好的解决方案。
如果打印消息是为了跟踪代码的状态,这里有一些有用的解决方案showing a status message in R
【讨论】:
【参考方案5】:如果您只想运行 script.R
,请尝试使用 source
函数。
source("script.R") # assuming script.R is in your working directory.
此函数将运行脚本而不在命令行中显示所有内容。
【讨论】:
谢谢。不幸的是,source("path/script.R")
阻止 sprintf()
在控制台中被披露。
@owner 这是故意的,sprintf
不应该打印到控制台。请改用message
。
@KonradRudolph:我通常使用sprintf()
将strings
打印到控制台,至少在Matlab
中。仅供参考:message()
也可以工作,尽管可能会(在外观上)与 R default warnings
消息混淆。最好的,
@owner 记录一下,sprintf
不打印字符串,fprintf
这样做,但是在 Matlab 中将分号从一行中删除会打印该行上的任何内容,但无论对你有用.
@owner 你做错了。它恰好在特定情况下工作,但正如你在这里看到的,它不能可靠地工作。顺便说一句,Matlab 也是如此。 sprintf
,尽管它的名字,是用于字符串格式化,而不是用于打印。以上是关于防止 Rstudio 控制台显示脚本命令的主要内容,如果未能解决你的问题,请参考以下文章