What are the differences between concatenating strings with cat
and paste
?
In particular, I have the following questions.
Why does R not use the double quote (
"
) when it prints the results of callingcat
(but it uses quotes when usingpaste
)?> cat("test") test > paste("test") [1] "test"
Why do the functions
length
andmode
, which are functions available for almost all objects in R, not "work" oncat
?> length(cat("test")) test[1] 0 > mode(cat("test")) test[1] "NULL"
Why do C-style escape sequences work with
cat
, but not withpaste
?> 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"
Why doesn't R's recycling rule work with
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"
cat
andpaste
are to be used in very different situations.paste
is notprint
When you
paste
something and don't assign it to anything, it becomes acharacter
variable that isprint
-ed usingprint.default
, the default method forcharacter
, hence the quotes, etc. You can look at the help forprint.default
for understanding how to modify what the output looks like.print.default
will not evaluate escape characters such as\n
within a character string.Look at the answers to this question for how to capture the output from
cat
.Quoting from the easy to read help for
cat
(?cat
)cat
will not return anything, it will just output to the console or another connection.Thus, if you try to run
length(cat('x'))
ormode(cat('x'))
, you are runningmode(NULL)
orlength(NULL)
, which will returnNULL
.The help for paste is equally helpful and descriptive