【问题标题】:Print string and variable contents on the same line in R在R中的同一行上打印字符串和变量内容
【发布时间】:2013-03-13 10:42:53
【问题描述】:

有没有办法在同一行打印文本和变量内容?例如,

wd <- getwd()
print("Current working dir: ", wd)

我找不到任何可以让我这样做的语法。

【问题讨论】:

    标签: r printing


    【解决方案1】:

    一个技巧是将您的代码包含在() 中,如下所示:

    (wd <- getwd())
    

    表示将当前工作目录分配给wd,然后打印出来。

    【讨论】:

      【解决方案2】:

      {glue} package 提供字符串插值。在示例中,{wd} 被替换为变量的内容。还支持复杂的表达式。

      library(glue)
      
      wd <- getwd()
      glue("Current working dir: {wd}")
      #> Current working dir: /tmp/RtmpteMv88/reprex46156826ee8c
      

      reprex package (v0.2.1) 于 2019 年 5 月 13 日创建

      请注意打印输出如何不包含 [1] 工件和 " 引号,其他答案使用 cat()

      【讨论】:

      • 我喜欢这个胶水包,因为在同一个句子中打印数字和字符串的格式类似于python的语法!
      【解决方案3】:

      {glue} 提供了更好的字符串插值,请参阅my other answer。此外,正如 Dainis 正确提到的,sprintf() 并非没有问题。

      还有sprintf():

      sprintf("Current working dir: %s", wd)
      

      要打印到控制台输出,请使用cat()message()

      cat(sprintf("Current working dir: %s\n", wd))
      message(sprintf("Current working dir: %s\n", wd))
      

      【讨论】:

      • 另一个不错的选择!这与其他脚本语言非常相似,如果您想要在其中实现多个变量的文本非常方便。谢谢!
      • 迄今为止最方便的选项,尤其是在您编写函数参数时。粘贴后,它很快就会变得一团糟。
      • 请注意 sprintf 不打印,它只是格式化字符串。在脚本中需要像 print(sprintf(...)) 这样的东西。
      【解决方案4】:

      您可以使用 paste0 或 cat 方法将字符串与 R 中的变量值组合

      例如:

      paste0("Value of A : ", a)
      
      cat("Value of A : ", a)
      

      【讨论】:

        【解决方案5】:

        正如其他用户所说,cat() 可能是最好的选择。

        @krlmlr 建议使用 sprintf() 并且它目前是排名第三的答案。 sprintf() 不是一个好主意。来自 R 文档:

        格式字符串传递给操作系统的sprintf函数,不正确的格式会导致后者崩溃R进程。

        没有充分的理由使用 sprintf() 而不是 cat 或其他选项。

        【讨论】:

          【解决方案6】:

          最简单的方法是使用paste()

          > paste("Today is", date())
          [1] "Today is Sat Feb 21 15:25:18 2015"
          

          paste0() 将导致以下结果:

          > paste0("Today is", date())
          [1] "Today isSat Feb 21 15:30:46 2015"
          

          请注意,字符串和 x 之间没有默认分隔符。在字符串末尾使用空格是一种快速解决方法:

          > paste0("Today is ", date())
          [1] "Today is Sat Feb 21 15:32:17 2015"
          

          然后将任一函数与print()结合起来

          > print(paste("This is", date()))
          [1] "This is Sat Feb 21 15:34:23 2015"
          

          或者

          > print(paste0("This is ", date()))
          [1] "This is Sat Feb 21 15:34:56 2015"
          

          正如其他用户所说,您也可以使用cat()

          【讨论】:

            【解决方案7】:

            您可以将pasteprint 一起使用

            print(paste0("Current working dir: ", wd))
            

            cat

            cat("Current working dir: ", wd)
            

            【讨论】:

            • 你可能想要sep = '',否则你会得到一个额外的空间。
            • 使用 cat() 最后我得到一个 NULL :(
            • @ragesz 如果您将 cat 放在打印件中,我只会在最后得到 null,例如:print(cat("test", var)) 应该是 cat("test", var)
            【解决方案8】:

            或使用message

            message("Current working dir: ", wd)
            

            @agstudy 的回答在这里更合适

            【讨论】:

            • 哇非常简单!
            猜你喜欢
            • 2016-12-10
            • 2015-12-30
            • 2013-06-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多