打印和显示字符串
R 有几个可用于打印或显示信息的内置函数,但 print
和 cat
是最基本的。由于 R 是一种解释型语言 ,你可以直接在 R 控制台中尝试这些:
print("Hello World")
#[1] "Hello World"
cat("Hello World\n")
#Hello World
注意两个函数的输入和输出的差异。 (注意:使用 x <- "Hello World"
创建的 x
的值中没有引号字符。它们在输出阶段由 print
添加。)
cat
将一个或多个字符向量作为参数并将它们打印到控制台。如果字符向量的长度大于 1,则参数以空格分隔(默认情况下):
cat(c("hello", "world", "\n"))
#hello world
没有换行符(\n
),输出将是:
cat("Hello World")
#Hello World>
输出后立即显示下一个命令的提示。 (某些控制台,例如 RStudio 可能会自动将换行符附加到不以换行符结尾的字符串。)
print
是通用函数的一个示例,这意味着检测到传递的第一个参数的类,并使用特定于类的方法进行输出。对于像 Hello World
这样的字符向量,结果类似于 cat
的输出。但是,引用字符串并输出数字 [1]
以指示字符向量的第一个元素(在这种情况下,第一个也是唯一的元素):
print("Hello World")
#[1] "Hello World"
当我们简单地要求 R 打印变量时,我们也会看到这种默认的打印方法。注意输入 s
的输出与调用 print(s)
或 print("Hello World")
相同:
s <- "Hello World"
s
#[1] "Hello World"
或者甚至没有将它分配给任何东西:
"Hello World"
#[1] "Hello World"
如果再加另一个字符串作为矢量的第二元素(使用 c()
函数 ç oncatenate 的元件一起),然后 print()
的行为看上去从 cat
的相当多的不同的:
print(c("Hello World", "Here I am."))
#[1] "Hello World" "Here I am."
观察该 c()
功能并没有做字符串串联。 (为此需要使用 paste
。)R 表示字符向量通过分别引用它们而具有两个元素。如果我们有一个足够长的矢量来跨越多行,R 将打印从每行开始的元素的索引,就像它在第一行的开头打印 [1]
一样。
c("Hello World", "Here I am!", "This next string is really long.")
#[1] "Hello World" "Here I am!"
#[3] "This next string is really long."
print
的特定行为取决于传递给函数的对象的类。
如果我们将 print
称为具有不同类的对象,例如 numeric
或 logical
,则从输出中省略引号以指示我们正在处理非字符类的对象:
print(1)
#[1] 1
print(TRUE)
#[1] TRUE
因子对象以与字符变量相同的方式打印,当控制台输出用于在 SO 问题体中显示对象时,这通常会产生歧义。除了交互式环境外,很少使用 cat
或 print
。明确调用 print()
是非常罕见的(除非你想抑制引号的外观或查看一个函数返回的对象),因为在控制台输入 foo
是 print(foo)
的快捷方式。R 的交互式控制台称为 REPL,即“读取 - 评估 - 打印 - 循环”。cat
函数最好保存用于特殊目的(例如将输出写入打开的文件连接)。有时它在函数内部使用(对 print()
的调用被抑制), **** 。首选方法是 message()
或 warning()
用于中间消息; 它们的行为与 cat
类似,但可以由最终用户选择性地抑制。应该简单地返回最终结果,以便用户可以指定它以在必要时存储它。
message("hello world")
#hello world
suppressMessages(message("hello world"))