输出R,避免写"[1]"

Joh*_*gue 27 r

print用来输出R中的函数,例如:

print("blah blah blah")
Run Code Online (Sandbox Code Playgroud)

这输出

[1] "blah blah blah"
Run Code Online (Sandbox Code Playgroud)

到控制台.我该如何避免[1]和报价?

Ale*_*lds 24

使用cat("Your string")(键入?cat以查看帮助页面)将连接对象输出到标准输出.

  • 您可能需要 `cat("Your string\n")` 因为 `print("Your string")` 自动添加换行符 (2认同)

Das*_*son 15

message可能是替代print您的需求的最佳功能. cat也是一个很好的功能,但message也会为你打印一个新的系列.使用起来也更好,因为它比抑制输出更容易message抑制输出cat.

如果您只想删除引号但不介意[1]打印,那么您可以使用quote=FALSE选项print.


编辑:如注释中所述,message 与调用不同,print因为它将输出发送到不同的连接.使用cat将按照其他人的注意事项执行您想要的操作,但您可能希望在消息后添加新行.

cat("This is a message\n") # You'll want to add \n at the end
Run Code Online (Sandbox Code Playgroud)

  • 它总是取决于你的意思.如果你的意思是,是的,只打印文本,我想看到它,没有人可以阻止我,你可以使用`cat()`; 如果你的意思是这是一条消息(不应该去`stdout`),`message()`是正确的选择.我相信很多人都在滥用`cat()`,特别是在包启动消息中.实际上这很烦人,因为很难抑制消息.`cat()`和`message()`的输出差异看起来微妙,但场景背后有很大的不同. (3认同)
  • 不要使用`message`.它将其输出发送到`stderr`连接,而不是使用`stdout`的`cat`(和`print`),如果您决定重定向输出,这可能会抛出你,例如使用`sink`.`message`实际上更类似于'warning`,因为它用于诊断和警告. (2认同)

And*_*rew 7

如果你想去掉唯一的[1],但保留换行符:

string_vector <- c('some', 'words', 'in', 'a', 'vector')
paste(string_vector, collapse = '\n') %>% cat()
Run Code Online (Sandbox Code Playgroud)

产生:

some
words
in
a
vector
Run Code Online (Sandbox Code Playgroud)