在R的同一行上打印字符串和变量内容


198

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

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

我找不到任何可以使我做到这一点的语法。

r  printing 

Answers:


299

你可以用pasteprint

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

要么 cat

cat("Current working dir: ", wd)

8
您可能想要,sep = ''否则您将获得额外的空间。
哈德利2013年

8
使用cat()我最后得到一个NULL:(
ragesz

5
@ragesz如果只将猫放入类似这样的打印物中,我最后只会得到null:print(cat("test", var)) 应该是cat("test", var)
Spidfire

62

{glue}提供了更好的字符串插值,请参见我的其他答案。而且,正如戴尼斯(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))

另一个不错的选择!这与其他脚本语言非常相似,如果要在文本中实现多个变量,则非常方便。谢谢!

1
到目前为止,最方便的选择是,尤其是在编写函数参数时。粘贴后,很快就变成了难以理解的混乱。
user27636 2015年

2
请注意,sprintf这不会打印,只会格式化字符串。脚本内部需要print(sprintf(...))之类的东西。
CHS


17

最简单的方法是使用 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()


14

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

library(glue)

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

reprex软件包(v0.2.1)创建于2019-05-13

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


8

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

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

格式字符串是通过OS的sprintf函数传递的,格式错误会导致后者使R进程崩溃。

没有充分的理由在cat或其他选项上使用sprintf()。


2

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

例如:

paste0("Value of A : ", a)

cat("Value of A : ", a)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.