【问题标题】:Prevent Rstudio console from showing script commands防止 Rstudio 控制台显示脚本命令
【发布时间】:2016-05-19 12:54:16
【问题描述】:

我正在使用 Rstudioscript.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 一样),但获取脚本并不会这样做,它只会丢弃它们。在sprintfs 周围放置一个print()
  • @drhagen 不,print 也不是真正的工具——message 是。
  • @drhagen: thx.that 解决了我的问题。最好的。

标签: r rstudio


【解决方案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 脚本通常会默默地丢弃该值。

      将文本打印到控制台的其他函数是catmessage,它们都略有不同。请参阅他们的帮助文件以了解使用情况。

      * 从技术上讲,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,尽管它的名字,是用于字符串格式化,而不是用于打印。
        猜你喜欢
        • 2015-01-16
        • 2017-06-13
        • 2018-01-18
        • 2016-03-12
        • 2013-10-05
        • 2012-11-21
        • 1970-01-01
        • 2020-08-12
        • 1970-01-01
        相关资源
        最近更新 更多