37

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

特别是,我有以下问题。

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

    > cat("test")
    test
    > paste("test")
    [1] "test"
    
  2. 为什么R 中几乎所有对象都可以使用的函数length不能在 上“工作” ?modecat

    > length(cat("test"))
    test[1] 0
    > mode(cat("test"))
    test[1] "NULL"
    
  3. 为什么 C 风格的转义序列适用于cat,但不适用于paste

    > 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"
    
4

1 回答 1

32

cat并且paste将在非常不同的情况下使用


paste不是print

当你有paste东西并且没有将它分配给任何东西时,它会变成一个character变量,它是print-ed using print.default,默认方法 for character,因此是引号等。你可以查看帮助以print.default了解如何修改输出的样子.

  • print.default不会评估转义字符,例如\n在字符串中。

查看这个问题的答案,了解如何从cat.


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

连接和打印

描述

输出对象,连接表示。cat执行的转换比print.

...

细节

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

价值

无(不可见NULL)。

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

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


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

连接字符串

描述

转换为 后连接向量character

……

价值

A character vector of the concatenated values. This will be of length zero if all the objects are, unless collapse is non-NULL in which case it is a single empty string.

于 2012-10-08T04:08:05.647 回答