2016-02-09 34 views
2

我使用Rstudio一个script.R运行几百行代码,但什么让我很烦,有点比Matlab是,Rstudio控制台保持机械显示从我的脚本文件中的每个command line。有没有办法来防止这种情况发生?防止Rstudio控制台命令

令人沮丧部分来了,当一个人使用sprintf()例如,该命令从脚本文件中的行混合起来使用控制台sprintf()的程度。

最佳,

+1

采购脚本时没有两个选项:Source和Source with Echo?这听起来像你正在点击源与回声。我总是点击普通的Source并没有看到脚本行。 – drhagen

+0

@drhagen:thx突出显示与Echo的区别,尽管我没有点击任何一个。在编写脚本时,我正在使用'ctrl + a',然后'f5'执行它。根据你的反馈,当我点击普通的'Source'时,问题是'sprintf()'没有出现在控制台中。 – owner

+0

这是因为sprintf不打印到命令行;它创建一个字符串。如果你一行一行地运行,REPL会为了方便而打印出纯粹的值(就像一个单纯的'1 + 1'一样),但是采集脚本不会这样做,它只是丢弃它们。在这些'sprintf'周围放置一个'print()'。 – drhagen

回答

4

ctrl+shift+S运行代码。或者在script.R的右上方找到源码,然后运行Source而不是Source with echo。而且,对于您要求印刷@Konrad Rudolph建议使用消息message("%f", pi)是最佳解决方案。

如果打印的消息是为了跟踪代码的状态这里有一些有用的解决方案showing a status message in R

0

如果你只是想运行script.R尝试使用source函数。

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

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

+0

thx。不幸的是'source(“path/script.R”)'防止'sprintf()'在控制台中被泄露。 – owner

+1

@owner这是故意的,'sprintf' *不应该打印到控制台。改用'message'。 –

+0

@KonradRudolph:我通常使用'sprintf()'至少在'Matlab'中打印字符串。 fyi:'message()'也可以工作,虽然可以用R'默认警告'消息来产生混淆(在外观上)。最好, – owner

1

像Matlab的sprintf,R的sprintf只创建一个字符串,它不会将其打印输出*您必须显式调用print功能,看什么:

print(sprintf("%f", pi)) # prints 

一个普通sprintf正式创建一个字符串,然后丢弃它,因为它没有被保存到一个变量:

sprintf("%f", pi) # does nothing 

然而,这种为你工作,因为REPL(运行R代码里面的一行,时间在命令行)不服从该指令放弃不保存到变量的值,而是打印它们。这是使命令行更容易工作的一种便利方式。你可以输入1+1并让它打印2,即使R脚本通常会默默丢弃该值。

将文本打印到控制台的其他功能是catmessage,它们各有轻微的不同。查看他们的帮助文件的使用。

*从技术上讲,Matlab将打印任何未被;终止的语句的值,包括字符串。因此,如果没有分号,那么sprintf产生的字符串可能会被打印出来,尽管它不是直接由sprintf完成的,而是由Matlab的通用打印全部行为行为完成的。在我看来,这是一个奇怪的功能。

+0

在'Matlab'中测试:'sprintf('invalidate misunderstanding')'并且更新你的断言。 – owner

+0

@owner在Matlab中测试:'1 + 2'。然后测试''使误解失效'。你会看到它*还*打印了一些东西。然而,显然“1 + 2”和“误解”都不是“打印声明”。 'sprintf'也是如此。 –

+0

@KonradRudolph:'char'类型的好点:) – owner