用 cat() 和 paste() 连接字符串有什么区别?

What are the differences between concatenating strings with cat() and paste()?

提问人:Sam 提问时间:10/8/2012 最后编辑:MichaelChiricoSam 更新时间:3/5/2020 访问量:24829

问:

用 和 连接字符串有什么不一样?catpaste

特别是,我有以下问题。

  1. 为什么 R 在打印调用结果时使用双引号 () (但在使用 时使用引号 )?"catpaste

    > cat("test")
    test
    > paste("test")
    [1] "test"
    
  2. 为什么函数 和 是 R 中几乎所有对象都可用的函数,但不能“工作”?lengthmodecat

    > length(cat("test"))
    test[1] 0
    > mode(cat("test"))
    test[1] "NULL"
    
  3. 为什么 C 样式转义序列适用于 ,而不适用于catpaste

    > cat("1)Line1\n 2)Line2\n 3)Line3")
    1)Line1
     2)Line2
     3)Line3
    > paste("1)Line1\n 2)Line2\n 3)Line3")
    [1] "1)Line1\n 2)Line2\n 3)Line3"
    
  4. 为什么 R 的回收规则不适用于 ?cat

    > cat("Grade", c(2, 3, 4, 5))
    Grade 2 3 4 5
    > paste("Grade", c(2, 3, 4, 5))
    [1] "Grade 2" "Grade 3" "Grade 4" "Grade 5"
    
字符串 连接 R-FAQ

评论


答:

33赞 mnel 10/8/2012 #1

catpaste 将在非常不同的情况下使用


pasteprint

当你做某事并且不将其分配给任何内容时,它就会变成一个变量,该变量使用 -ed ,这是 的默认方法,因此是引号等。您可以查看帮助,了解如何修改输出的外观。pastecharacterprintprint.defaultcharacterprint.default

  • print.default不会计算转义字符,例如字符串中的转义字符。\n

查看此问题的答案,了解如何从 捕获输出。cat


引用易于阅读的帮助cat (?cat)

连接和打印

描述

输出对象,连接表示形式。 执行 转化率比 低得多。catprint

...

cat对于在用户定义函数中生成输出很有用。它 将其参数转换为向量,将它们连接成一个 单个向量,将给定的附加到每个向量 元素,然后输出它们。charactercharactersep= string(s)

价值

无(不可见)。NULL

cat 不会返回任何内容,它只会输出到控制台或其他连接。

因此,如果您尝试运行 or ,则您正在运行 或 ,它将返回 。length(cat('x'))mode(cat('x'))mode(NULL)length(NULL)NULL


粘贴的帮助同样有用且具有描述性

连接字符串

描述

转换为 后连接向量。character

....

价值

串联值的向量。这将是长度 如果所有对象都为零,除非 collapse 为 non-,在这种情况下 它是一个空字符串。characterNULL