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

问题描述 投票:17回答:1

连接字符串与catpaste有什么区别?

特别是,我有以下问题。

  1. 为什么R在打印调用"的结果时不使用双引号(cat)(但在使用paste时它使用引号)? > cat("test") test > paste("test") [1] "test"
  2. 为什么函数lengthmode,它们是R中几乎所有对象都可用的函数,而不是在cat上“工作”? > 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"
r character string-concatenation
1个回答
17
投票

catpaste将用于非常不同的情况。


paste不是print

当你paste的东西,并没有将它分配给任何东西,它变成一个character变量,使用printprint.default的默认方法,因此引号,等等。你可以看看帮助character理解如何修改输出的样子。

  • print.default不会在字符串中评估print.default等转义字符。

看看这个\n的答案,了解如何捕获question的输出。


引用catcat)易于阅读的帮助

连接和打印

Description

输出对象,连接表示。 ?catcat执行的转换要少得多。

...

Details

print可用于在用户定义的函数中生成输出。它将其参数转换为cat向量,将它们连接到单个character向量,将给定的character附加到每个元素,然后输出它们。

Value

没有(看不见的sep= string(s))。

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

因此,如果你试图运行catlength(cat('x')),你运行mode(cat('x'))mode(NULL),它将返回length(NULL)


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

连接字符串

Description

转换为NULL后连接向量。

....

Value

连接值的character向量。如果所有对象都是,则长度为零,除非折叠是非character,在这种情况下它是单个空字符串。

© www.soinside.com 2019 - 2024. All rights reserved.