Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
380 views
in Technique[技术] by (71.8m points)

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

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

In particular, I have the following questions.

  1. Why does R not use the double quote (") when it prints the results of calling cat (but it uses quotes when using paste)?

    > cat("test")
    test
    > paste("test")
    [1] "test"
    
  2. Why do the functions length and mode, which are functions available for almost all objects in R, not "work" on cat?

    > length(cat("test"))
    test[1] 0
    > mode(cat("test"))
    test[1] "NULL"
    
  3. Why do C-style escape sequences work with cat, but not with paste?

    > cat("1)Line1
     2)Line2
     3)Line3")
    1)Line1
     2)Line2
     3)Line3
    > paste("1)Line1
     2)Line2
     3)Line3")
    [1] "1)Line1
     2)Line2
     3)Line3"
    
  4. 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"
    
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

cat and paste are to be used in very different situations.


paste is not print

When you paste something and don't assign it to anything, it becomes a character variable that is print-ed using print.default, the default method for character, hence the quotes, etc. You can look at the help for print.default for understanding how to modify what the output looks like.

  • print.default will not evaluate escape characters such as 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)

Concatenate and Print

Description

Outputs the objects, concatenating the representations. cat performs much less conversion than print.

...

Details

cat is useful for producing output in user-defined functions. It converts its arguments to character vectors, concatenates them to a single character vector, appends the given sep= string(s) to each element and then outputs them.

Value

None (invisible NULL).

cat will not return anything, it will just output to the console or another connection.

Thus, if you try to run length(cat('x')) or mode(cat('x')), you are running mode(NULL) or length(NULL), which will return NULL.


The help for paste is equally helpful and descriptive

Concatenate Strings

Description

Concatenate vectors after converting to character.

....

Value

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.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...