【问题标题】:Rstudio difference between run and sourceRstudio 运行和源码的区别
【发布时间】:2014-07-18 09:16:02
【问题描述】:

我正在使用 Rstudio,但不确定“运行”和“源”选项有何不同。

我尝试用谷歌搜索这些术语,但“来源”是一个非常常见的词,无法获得良好的搜索结果:(

【问题讨论】:

    标签: rstudio


    【解决方案1】:

    Run 和source 的含义略有不同。根据 RStudio documentation,

    从选择和调用中运行的行之间的区别 来源是在运行选择时插入所有行 直接进入控制台,而对于 Source 文件保存到 临时位置,然后从那里获取到控制台 (从而减少控制台中的混乱)。

    需要注意的是,文件中的源函数使它们可供脚本使用。这是什么意思?想象一下,您正在尝试对从脚本调用的函数进行故障排除。您需要 source 包含该函数的文件,以便在脚本中的该行为 run 时使用函数中的更改。

    另一方面,您可以在脚本中使用source 函数。我使用这段代码自动获取一个目录中的所有函数,这使得使用单个 run 运行长脚本变得容易:

    # source our functions
    code.dir <- "c:\temp"
    code.files = dir(code.dir, pattern = "[.r]")
    for (file in code.files){
      source(file = file.path(code.dir,file))
    }
    

    【讨论】:

    • 或者,您可以从您的函数中创建一个包。
    • 是的。我经常这样做用于数据分析,其中文件格式和处理因项目而异。我还想演示 OP 如何在实际应用程序中使用 source。
    • 该代码本质上等同于源代码示例中给出的代码。你可以使用它:example(source); sourceDir("c:\\temp")
    【解决方案2】:

    有时,由于我不明白的原因,您会得到不同的行为,具体取决于您是选择所有代码行并按下运行按钮还是转到代码菜单并选择“源代码”。例如,在一种特定情况下,当我选择所有代码行时,将 gplot 写入 png 文件是可行的,但当我进入代码菜单并选择“源”时写入失败。但是,如果我选择“Source with Echo”,我可以再次打印到 png 文件。

    我只是在这里报告一个区别,我在选择和运行所有行和代码与进入代码菜单并选择“源”之间看到了差异,至少在尝试将 gplot 打印到.png 文件。

    【讨论】:

    • 这里我也有一些奇怪的差异,我也无法解释
    • 我遇到了同样的问题。使用 Run 可以毫无问题地运行代码,但 Source 会导致一个空图。
    【解决方案3】:

    @AndyClifton 的回答的一个重要含义是:

    Rstudio 断点在source (Ctrl-Shift-S) 中有效,但在run (Ctrl-Enter) 中不

    大概是因为使用run,代码被直接传递到控制台,不支持部分提交。

    您仍然可以使用 browser() 和 run。

    debugSource (Ctrl-Shift-S) 和run 支持print() 到控制台。

    【讨论】:

      【解决方案4】:

      “运行”按钮只是执行选定的一行或多行。 “源”按钮将执行整个活动文档。但是为什么不尝试一下,看看有什么不同呢?

      【讨论】:

      • 这应该是最佳答案!其他答案太详细了。
      • 正如其他人所指出的,在 source-ing 而不是运行所有行时,行为有时会有所不同,这可能需要更详细的答案。
      • 对于它的价值,我当时只是迅速回答了一个未回答的问题。但现在,大约 6 年后,它经常看到反对票,我看到在许多精心回答的背景下,它可能会显得有点粗鲁。
      【解决方案5】:

      Run 将运行每一行代码,这意味着它在每一行的开头按 enter,将输出打印到控制台。除非您使用 echo 获取源,否则源不会打印任何内容,这意味着 ggplot 不会打印到 pngs,正如另一个帖子所提到的。

      【讨论】:

      • Yes Run 在每一行的开头点击进入。但它确实将输出打印到控制台。创建一个新的 R 文件并输入 print("Hello World") 保存此文件(作为 xR),然后从控制台执行 source("x.R") 您应该在 Console 上看到 [1] "Hello World" 请查看我显示的其他答案它也可以写情节
      【解决方案6】:

      我还刚刚发现,如果您使用源文件或使用 Ctrl+Enter 将源文件的函数添加到您的环境中,用于读取源函数的编码也可能不同!

      在我的例子中,我的函数中有一个带有特殊字符 (µ) 的正则表达式。当我直接导入函数 (Ctrl+Enter) 时,一切正常,而在获取包含此函数的文件时出现错误。

      为了解决这个问题,我在 source 函数 (source("utils.R", encoding = "UTF-8")) 中指定了源文件的编码。

      【讨论】:

      • 我只是在手动运行文件和使用源代码运行文件时出现了不同的行为。这正是因为我使用带有重音字符的字符串过滤了tibble。运行传递编码解决了这个问题。谢谢!
      【解决方案7】:

      使用 RStudio 时,您可以按脚本部分中的运行按钮 - 它将运行选定的行。 在它旁边有重新运行按钮,用于再次运行该行。它旁边的源按钮将运行整个代码块。

      我找到了一个关于这个主题的视频:

      http://www.youtube.com/watch?v=5YmcEYTSN7k

      【讨论】:

        【解决方案8】:

        Source/Source with echo 用于执行整个文件,而 Run 就我个人的经验而言,会执行光标所在的行。 因此,Run 可以帮助您调试代码。注意环境。它将显示堆栈中发生的事情。

        【讨论】:

          【解决方案9】:

          对于那些说情节不显示的人。它们不会显示在 Plots 控制台中。但是您绝对可以使用 RStudio 中的 Source 将绘图保存到光盘。使用这个 sn-p:

          png(filename)
          print(p)
          dev.off()
          

          我可以确认情节已写入光盘。此外打印语句也输出到控制台

          【讨论】:

            【解决方案10】:

            run 和 source 之间的一个很大的实际区别是,如果您在 source 中遇到无法解释的错误,它将使您在没有完成的情况下退出代码,而 run 只会将下一行传递到控制台并继续运行。这是我在清理其他人的脚本时看到的主要实际区别。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-10-31
              • 1970-01-01
              • 2017-09-23
              • 1970-01-01
              • 2015-05-30
              • 1970-01-01
              相关资源
              最近更新 更多