R Academy · 课时

使用 cat() 和 print() 显示输出

区分用于控制台输出的 cat() 与用于对象的 print()

第 3 / 4 课13 个步骤

使用 cat() 和 print() 显示输出 是 CoddyKit 上的免费 R Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 R Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 R Academy 课程共包含 4 节课。

print() — 默认输出函数

print() 是 R 中用于显示对象的默认方法。它根据对象的类来分派相应的格式化方法。在交互式会话中,输入变量名等同于对该变量调用 print()。

x <- c(1, 2, 3, 4, 5)
print(x)
# Equivalent to:
x

cat() — 原始字符输出

cat() 将其参数连接起来并以原始文本形式输出,不会添加包围引号、[1] 等索引标记,默认也不会在末尾添加换行。它用于输出格式化文本,而不是显示 R 对象。

name <- 'Alice'
age  <- 30
cat('Name:', name, '\n')
cat('Age:', age, '\n')
cat('Score:', 92.5, '\n')

关键区别:引号和 [1]

最明显的区别在于字符字符串的显示方式。print() 会为字符串添加引号,并加上 [1];cat() 则直接输出原始字符,不添加任何装饰。

msg <- 'Hello World'
print(msg)
cat(msg, '\n')

使用 sep 参数调用 cat()

cat() 接受一个 sep 参数,该参数会放在每个输出项之间。默认值是一个空格。使用 sep = '' 表示不使用分隔符,也可以使用其他字符串来精确控制输出格式。

cat('a', 'b', 'c', sep = '')
cat('a', 'b', 'c', sep = '-')
cat(1:5, sep = ', ')
cat('x =', 42, sep = '')

使用 fill 参数调用 cat()

fill 参数会在输出超过指定宽度(以字符数计)时添加换行。设置 fill = TRUE 会使用当前的 width 选项。它适合用于换行显示较长的词序列。

words <- c('The', 'quick', 'brown', 'fox', 'jumps',
           'over', 'the', 'lazy', 'dog')
cat(words, fill = 30)

print() 的方法分派

print() 是一个泛型函数——它会分派到特定类的方法。例如,print.data.frame 会以清晰的格式处理数据框,print.factor 会显示因子水平,等等。因此,对不同对象进行相同调用时,显示结果可能不同。

# print dispatches differently per class
print(42L)                        # integer
print(factor(c('a', 'b', 'a')))   # factor with levels
print(list(x = 1, y = 'hi'))      # list

invisible() — 抑制自动打印

invisible(x) 会返回其参数,但会抑制函数或表达式返回值时的自动打印。它用于让函数静默返回值,例如赋值运算符所使用的函数。

# Explicit print shows the value
f <- function(x) invisible(x * 2)
result <- f(5)
# Nothing printed automatically
f(5)
# But print() forces it
print(f(5))

message() — 输出到 stderr

message() 会写入 stderr,而不是 stdout。它会自动追加换行。与 cat() 或 print() 不同,消息可以使用 suppressMessages() 抑制,也可以使用 tryCatch() 捕获。

message('This goes to stderr')
cat('This goes to stdout\n')
# Suppress messages:
suppressMessages(message('hidden'))
cat('Still visible\n')

何时使用 cat(),何时使用 print()

如果您要生成人类可读的文本输出,例如日志行、进度消息或格式化报告,请使用 cat()。如果您要如实检查 R 对象,并保留其类型信息和结构,请使用 print()。

# cat() for formatted output
cat(sprintf('Processing %d records...\n', 500))
cat('Done.\n')

# print() to inspect objects
result <- list(n = 500, mean = 4.2, sd = 1.1)
print(result)

对数据框使用 print()

print.data.frame 会显示带有行号、列标题和对齐值的数据框。您可以使用 print(df, n = k) 这种形式控制显示的行数,也可以在打印前使用 head()。

df <- data.frame(
  name  = c('Alice', 'Bob', 'Carol'),
  score = c(88, 95, 72)
)
print(df)

使用 cat() 显示循环进度

cat() 的一个实用场景是显示循环进度。由于 cat() 不会自动添加换行,您可以逐步构建一行内容,然后使用 '\n' 将其输出并换行。

for (i in 1:5) {
  cat(sprintf('Processing file %d of 5...\n', i))
}
cat('All files processed.\n')

快速检查

哪个输出函数会写入 stderr、自动追加换行,并且可以使用 suppressMessages() 抑制?

输出函数:要点总结

R 输出函数的要点:

  • print(x) — 检查 R 对象;使用特定于类的格式;添加 [1] 和引号
  • cat(...) — 输出原始文本;不加引号;不自动换行;请显式使用 '\n'
  • cat() 接受 sep 和 fill,用于控制格式
  • invisible(x) — 返回 x,但不自动打印
  • message() — 输出到 stderr;自动换行;可由 suppressMessages() 抑制
  • 将 cat() 与 sprintf() 结合使用,可生成格式化报告和日志
x <- 'result'
print(x)              # shows: [1] "result"
cat(x, '\n')          # shows: result
message('info: ', x)  # goes to stderr
f <- function() invisible(42)
f()                   # nothing printed
print(f())            # forces print: [1] 42
免费开始

用 AI 导师学习 R — 免费

在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。

课程
43
课程
159

常见问题解答

「使用 cat() 和 print() 显示输出」课时是免费的吗?

是的 — 「使用 cat() 和 print() 显示输出」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 R Academy 课程的其余内容,请升级到 CoddyKit PRO。 R Academy 课程共包含 4 节课。

「使用 cat() 和 print() 显示输出」这节课中我会学到什么?

区分用于控制台输出的 cat() 与用于对象的 print() 你通过在浏览器中直接运行的动手代码来练习 R Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 R Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 R Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「使用 cat() 和 print() 显示输出」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 R Academy 课中编写并运行代码吗?

能。每节 R Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 使用 paste() 和 paste0() 构建字符串
  2. 使用 sprintf() 格式化输出
  3. 使用 cat() 和 print() 显示输出
  4. 字符串填充与对齐
← 返回 R Academy