【问题标题】:R markdown: Accessing variable from code chunk (variable scope) [duplicate]R markdown:从代码块访问变量(变量范围)[重复]
【发布时间】:2012-06-09 18:39:38
【问题描述】:

在 R markdown(knitr 包)中,我可以访问在代码块中计算的文档正文中的变量吗?

【问题讨论】:

    标签: r knitr r-markdown


    【解决方案1】:

    是的。您可以简单地调用任何先前评估的变量内联。

    例如如果您之前使用df <- data.frame(x=1:10) 在块中创建了data.frame

    `r max(df$x)`
    

    应该产生

    10
    

    【讨论】:

    • 但请注意,这将被排版为代码,如果您希望以纯文本形式使用它可能不是您想要的。 r I(max(df$x)) 应该也能正常工作,而不是以代码格式排版。
    【解决方案2】:

    我想补充一点,对于除 R 之外的其他语言,情况并非如此。我知道问题已经解决并且关于 R,但也许其他人会觉得这很有用:

    除了engine='R'(默认),所有的chunk都在单独的session中执行,所以变量不能直接共享。如果我们想利用之前块中创建的对象,我们通常必须将它们写入文件(作为副作用)。对于 bash 引擎,我们可以使用 Sys.setenv() 将变量从 R 导出到 bash(示例)。另一种方法是使用(实验性)runr 包。

    Source

    R 中的示例:

    x = 4
    
    print(x)
    
    ## [1] 4
    

    Python 示例 2a):

    x=1
    print(x)
    
    ## 1
    

    Python 示例 2b):

    print(x)
    
    ## Traceback (most recent call last):
    ##   File "<string>", line 1, in <module>
    ## NameError: name 'x' is not defined
    

    仅供参考。

    【讨论】:

    • 我目前的经验是他们已经改进了这一点,现在对象可以跨 Python 块持续存在。
    • @david-kaufman,同意。在文档中找到此引用后,刚刚浏览了此页面:“目前唯一的例外是 rpythonjulia。只有这些引擎在整个文档的同一会话中执行代码。”来源:bookdown.org/yihui/rmarkdown/language-engines.html
    【解决方案3】:

    您可以访问以前创建的变量

    `r variable`
    

    但是如果变量是数字并且你想添加到pdf文档中,你应该将变量转换为字符串

    `r toString(variable)`
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多