防止Rstudio控制台显示脚本命令

防止Rstudio控制台显示脚本命令,r,rstudio,R,Rstudio,我正在使用Rstudio从script.R运行数百行代码,但与Matlab相比,让我有点恼火的是Rstudio控制台一直机械地显示我脚本文件中的每个命令行。有没有办法防止这种情况发生 令人沮丧的是,例如,当使用sprintf()时,脚本文件中的命令行与控制台中的sprintf()相混淆 最好是使用ctrl+shift+S运行代码。或者转到script.R右上角的源代码,然后只运行source,而不运行带有echo的source。至于您对@Konrad Rudolph打印的要求,建议使用messa

我正在使用
Rstudio
script.R
运行数百行代码,但与
Matlab
相比,让我有点恼火的是
Rstudio
控制台一直机械地显示我脚本文件中的每个
命令行。有没有办法防止这种情况发生

令人沮丧的是,例如,当使用
sprintf()
时,脚本文件中的命令行与控制台中的
sprintf()
相混淆


最好是使用
ctrl+shift+S
运行代码。或者转到
script.R
右上角的源代码,然后只运行
source
,而不运行带有echo的
source
。至于您对@Konrad Rudolph打印的要求,建议使用message
message(“%f”,pi)
是最好的解决方案


如果打印消息是为了跟踪代码的状态,如果您只想运行
script.R
,请尝试使用
源代码
功能

source("script.R") # assuming script.R is in your working directory.

此函数将运行脚本,而不会在命令行中显示所有内容。

与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的通用打印所有东西行为完成的。在我看来,这是一个奇怪的特性。

只需在()之间加上您希望从console获得Suppress的代码行:

1+1
output looks:
> 1+1
[1] 2

(1+1)
output looks:
> [1] 2

在获取脚本资源时,不是有两种选择:源代码和带有Echo的源代码吗?听起来像是在用Echo单击Source。我总是单击纯源代码,但看不到脚本行。@drhagen:thx用于突出显示与
Echo
的差异,尽管我没有单击其中任何一行。编写脚本时,我使用
ctrl+a
,然后使用
f5
执行脚本。根据您的反馈,当我单击plain
Source
时,问题是控制台中没有显示
sprintf()
;它创建一个字符串。如果您逐行运行,REPL将为您打印裸值(就像裸
1+1
),但是源代码脚本不会这样做,它只会丢弃它们。在那些
sprintf
s周围放一个
print()
。@drhagen不,
print
也不是这个的工具-
消息是。@drhagen:thx。这解决了我的问题。最好的。谢谢。不幸的是
source(“path/script.R”)
阻止
sprintf()
在控制台中被公开。@所有者这是故意的,
sprintf
不应该打印到控制台。改为使用
消息
。@KonradRudolph:我通常使用
sprintf()
打印
字符串
,至少在
Matlab
中进行控制台操作。仅供参考:
message()
也可以工作,不过可能会(显然)与R
默认警告信息混淆。最好,@owner For the record,
sprintf
不会打印字符串,
fprintf
会这样做,但在Matlab中保留分号将打印该行上的任何内容,但任何对您有用的内容。@owner好吧,您做得不对。它在特定的环境下工作,但正如你在这里看到的,它不能可靠地工作。顺便说一句,Matlab也是如此
sprintf
,尽管名称不同,但它是用于字符串格式设置的,而不是用于打印。在
Matlab
中进行测试:
sprintf('invalidate mission')
,请更新您的断言。@owner在Matlab中测试:
1+2
。然后测试
“消除误解”
。你会看到它也会打印一些东西。然而很明显,无论是
1+2
还是
“消除误解”
都不是书面陈述。
sprintf
也是如此。