print()

> x <- 'Hello world!'
> print(x)
[1] "Hello world!"

quote

If quote is set to FALSE then the quotation marks won’t be printed-

> print(x, quote= F)
[1] Hello world!

digits

to print values for specific number of digits-

> print(c(pi,4.783))
[1] 3.141593 4.783000
> print(c(pi,4.783),digits = 15)
[1] 3.14159265358979 4.78300000000000

na.print

To show something else in place of NA-

> vac <- c(1,3,5, NA, 6, NA, 47, NA)
> print(vac)
[1]  1  3  5 NA  6 NA 47 NA
> print(vac, na.print="0") 
[1]  1  3  5  0  6  0 47  0
> print(vac, na.print="Empty") 
[1]     1     3     5 Empty     6 Empty    47 Empty

print.gap

To change the gap between the outputs-

> vac <- c(1,3,5,6,47)
> print(vac)
[1]  1  3  5  6 47
> print(vac, print.gap= 4)
[1]     1     3     5     6    47

max

To define how many values to show-

> s<- c(1:50)
> print(s)
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
[26] 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
> print(s, max=10)
 [1]  1  2  3  4  5  6  7  8  9 10
 [ reached getOption("max.print") -- omitted 40 entries ]
> print(s, max=5)
[1] 1 2 3 4 5
 [ reached getOption("max.print") -- omitted 45 entries ]

row.names

To hide the row numbers set row.names to FALSE-

> sel<-c(1:3)
> names<-c('Himel','Elias','Tonmoy')
> df<- data.frame(sel,names)
> print(df)
  sel  names
1   1  Himel
2   2  Elias
3   3 Tonmoy
> print(df, row.names=F)
 sel  names
   1  Himel
   2  Elias
   3 Tonmoy

noquote()

nonquote() is equivalent to using quote=F in print()-

> str<- "programming with data is fun"
> print(str)
[1] "programming with data is fun"
> noquote(str)
[1] programming with data is fun

cat()

"" needs to be used in cat() so that the next object prints on the next line-

> str<- "programming with data is fun"
> for (i in 1:3){
+   cat(str)
+ }
programming with data is funprogramming with data is funprogramming with data is fun
> for (i in 1:3){
+   cat(str,"\n")
+   }
programming with data is fun 
programming with data is fun 
programming with data is fun 

Also the outcome doesn’t show [1] meaning that if it is assigned to any variable then it will print NULL instead of printing out the object-

> a <- print("Print example")
[1] "Print example"
> b <- cat("Cat example")
Cat example
> a
[1] "Print example"
> b  # will show NULL
NULL

fill

The argument fill is either a logical variable or a positive number.
The default value is FALSE.
If TRUE, line breaks are set with “\n” or a break in a quoted string.
If fill is a positive number, the number is used to set the width.

> words<- c('a','b','d','e')
> for (i in 1:3){
+ cat(words, fill=F)
+ }
a b d ea b d ea b d e
> for (i in 1:3){
+ cat(words, fill=T)
+ }
a b d e
a b d e
a b d e
> cat(words, fill=1)
a 
b 
d 
e
> cat(words, fill=6)
a b d 
e
> cat(words, fill=4)
a b 
d e

sep

> cat(month.name[1:4],"\n")
January February March April 
> cat(month.name[1:4], sep= ' > ')
January > February > March > April

An application of cat

> n<-c(-10,0,10,100)
> for (i in n){
+   R<-round(rnorm(10,i,1))
+   cat('When Mean is',i,'\nRandom Numbers: ',R,'\n', fill=T)}
When Mean is -10 
Random Numbers:  -9 -9 -10 -9 -10 -11 -9 -11 -10 -10 

When Mean is 0 
Random Numbers:  -1 -1 0 0 1 0 -1 1 0 1 

When Mean is 10 
Random Numbers:  11 10 9 10 10 11 11 10 10 9 

When Mean is 100 
Random Numbers:  99 100 100 98 100 100 100 99 99 100 

paste()

It converts its arguments to character strings via as.character

> paste('Himel', 4+5, 'Durjoy', 'Rafi')   # by default sep=' '
[1] "Himel 9 Durjoy Rafi"
> paste(c(1:5, 4, 99))
[1] "1"  "2"  "3"  "4"  "5"  "4"  "99"

paste0 is equivalent to paste(.., sep=’’)

> paste0('Himel', 4+5,'Durjoy', 'Rafi')
[1] "Himel9DurjoyRafi"

sep

> paste('Himel', 'Durjoy', 'Rafi', sep=', ')
[1] "Himel, Durjoy, Rafi"
> paste(1:3,'YES','NO', sep=' - ')
[1] "1 - YES - NO" "2 - YES - NO" "3 - YES - NO"

collapse

> paste(c(1:5, 4, 99), collapse=', ')
[1] "1, 2, 3, 4, 5, 4, 99"

collapse vs sep

> paste(c(1:5, 4, 99), c('not','done'), collapse=', ')
[1] "1 not, 2 done, 3 not, 4 done, 5 not, 4 done, 99 not"
> paste(c(1:5, 4, 99), c('not','done'), sep=', ')
[1] "1, not"  "2, done" "3, not"  "4, done" "5, not"  "4, done" "99, not"

Using paste inside print()

> print(1+1,8+8,5-2)
[1] 2
> print(paste(1+1,8+8,5-2))
[1] "2 16 3"

format()

> a <- seq(1,12000,900)
> format(a)
 [1] "    1" "  901" " 1801" " 2701" " 3601" " 4501" " 5401" " 6301" " 7201"
[10] " 8101" " 9001" " 9901" "10801" "11701"

trim

> format(a, trim=T)
 [1] "1"     "901"   "1801"  "2701"  "3601"  "4501"  "5401"  "6301"  "7201" 
[10] "8101"  "9001"  "9901"  "10801" "11701"

digits

> b <- c(1.3,1.43,pi)
> format(b)
[1] "1.300000" "1.430000" "3.141593"
> format(b, digits=3)
[1] "1.30" "1.43" "3.14"
> format(b, digits=12)
[1] "1.30000000000" "1.43000000000" "3.14159265359"

nsmall

To suggest how many decimal places to show-

> b <- c(1.3,1.43,1.784)
> format(b) 
[1] "1.300" "1.430" "1.784"
> format(b, nsmall=5)
[1] "1.30000" "1.43000" "1.78400"

It cannot round the values-

> format(b, nsmall=1)
[1] "1.300" "1.430" "1.784"

width

It suggests how long the total character string should be-

> print(b)
[1] 1.300 1.430 1.784
> format(b, width=7)
[1] "  1.300" "  1.430" "  1.784"

Like nsmall, it cannot cut any values-

> format(b, width=1)
[1] "1.300" "1.430" "1.784"

justify

> d <- c("a","b","c","drunk")
> format(d, justify = "right") 
[1] "    a" "    b" "    c" "drunk"
> format(d, justify = "centre") 
[1] "  a  " "  b  " "  c  " "drunk"

Combining with cat we can display it in a more convenient way

> cat(format(d, justify = 'right'), fill=1,"\n")
    a 
    b 
    c 
drunk 
> cat(format(d, justify = 'centre'), fill=1,"\n")
  a   
  b   
  c   
drunk 
> cat(format(d, justify = 'left'), fill=1,"\n")
a     
b     
c     
drunk 

sprintf()

For C like printing function-

> a <- 12; b <- pi; c <- "String";
> sprintf("%g and %.4f are not %s",a,b,c)
[1] "12 and 3.1416 are not String"
LS0tDQp0aXRsZTogIlByaW50aW5nIGluIFIiDQphdXRob3I6ICJNRCBBSFNBTlVMIElTTEFNIg0Kb3V0cHV0OiANCiAgaHRtbF9kb2N1bWVudDoNCiAgICB0b2M6IHRydWUNCiAgICB0b2NfZmxvYXQ6IHRydWUNCiAgICB0b2NfZGVwdGg6IDQNCiAgICB0aGVtZTogY2VydWxlYW4NCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlDQotLS0NCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KA0KICBjb21tZW50ID0gIiIsIHByb21wdCA9IFRSVUUsIGNvbGxhcHNlID0gVFJVRQ0KKQ0KYGBgDQoNCi0tLQ0KDQojIyMgcHJpbnQoKQ0KYGBge3J9DQp4IDwtICdIZWxsbyB3b3JsZCEnDQpwcmludCh4KQ0KYGBgDQoNCiMjIyMgcXVvdGUNCklmIGBxdW90ZWAgaXMgc2V0IHRvIEZBTFNFIHRoZW4gdGhlIHF1b3RhdGlvbiBtYXJrcyB3b24ndCBiZSBwcmludGVkLQ0KYGBge3J9DQpwcmludCh4LCBxdW90ZT0gRikNCmBgYA0KDQojIyMjIGRpZ2l0cw0KdG8gcHJpbnQgdmFsdWVzIGZvciBzcGVjaWZpYyBudW1iZXIgb2YgZGlnaXRzLQ0KYGBge3J9DQpwcmludChjKHBpLDQuNzgzKSkNCnByaW50KGMocGksNC43ODMpLGRpZ2l0cyA9IDE1KQ0KYGBgDQoNCiMjIyMgbmEucHJpbnQNClRvIHNob3cgc29tZXRoaW5nIGVsc2UgaW4gcGxhY2Ugb2YgTkEtDQpgYGB7cn0NCnZhYyA8LSBjKDEsMyw1LCBOQSwgNiwgTkEsIDQ3LCBOQSkNCnByaW50KHZhYykNCnByaW50KHZhYywgbmEucHJpbnQ9IjAiKSANCnByaW50KHZhYywgbmEucHJpbnQ9IkVtcHR5IikgDQpgYGANCg0KIyMjIyBwcmludC5nYXANCg0KVG8gY2hhbmdlIHRoZSBnYXAgYmV0d2VlbiB0aGUgb3V0cHV0cy0NCmBgYHtyfQ0KdmFjIDwtIGMoMSwzLDUsNiw0NykNCnByaW50KHZhYykNCnByaW50KHZhYywgcHJpbnQuZ2FwPSA0KQ0KYGBgDQoNCiMjIyMgcmlnaHQNCg0KVG8gcHJpbnQgcmlnaHQgYWxpZ25lZCBvdXRwdXRzLQ0KYGBge3J9DQpkZTwtIGMoJ0hpbWVsJywnYWhzYW5oaW1lbEBlbWFpbC5jb20nKQ0KcHJpbnQoZGUpDQpwcmludChkZSwgcmlnaHQ9IFQpDQpgYGANCg0KIyMjIyBtYXgNCg0KVG8gZGVmaW5lIGhvdyBtYW55IHZhbHVlcyB0byBzaG93LQ0KYGBge3J9DQpzPC0gYygxOjUwKQ0KcHJpbnQocykNCnByaW50KHMsIG1heD0xMCkNCnByaW50KHMsIG1heD01KQ0KYGBgDQoNCiMjIyMgcm93Lm5hbWVzDQoNClRvIGhpZGUgdGhlIHJvdyBudW1iZXJzIHNldCByb3cubmFtZXMgdG8gRkFMU0UtDQpgYGB7cn0NCnNlbDwtYygxOjMpDQpuYW1lczwtYygnSGltZWwnLCdFbGlhcycsJ1Rvbm1veScpDQpkZjwtIGRhdGEuZnJhbWUoc2VsLG5hbWVzKQ0KcHJpbnQoZGYpDQpwcmludChkZiwgcm93Lm5hbWVzPUYpDQpgYGANCg0KLS0tDQoNCiMjIyBub3F1b3RlKCkNCg0Kbm9ucXVvdGUoKSBpcyBlcXVpdmFsZW50IHRvIHVzaW5nIGBxdW90ZT1GYCBpbiBwcmludCgpLQ0KYGBge3J9DQpzdHI8LSAicHJvZ3JhbW1pbmcgd2l0aCBkYXRhIGlzIGZ1biINCnByaW50KHN0cikNCm5vcXVvdGUoc3RyKQ0KYGBgDQoNCi0tLQ0KDQojIyMgY2F0KCkNCg0KXCJcbiIgbmVlZHMgdG8gYmUgdXNlZCBpbiBjYXQoKSBzbyB0aGF0IHRoZSBuZXh0IG9iamVjdCBwcmludHMgb24gdGhlIG5leHQgbGluZS0NCmBgYHtyfQ0Kc3RyPC0gInByb2dyYW1taW5nIHdpdGggZGF0YSBpcyBmdW4iDQpmb3IgKGkgaW4gMTozKXsNCiAgY2F0KHN0cikNCn0NCmZvciAoaSBpbiAxOjMpew0KICBjYXQoc3RyLCJcbiIpDQogIH0NCmBgYA0KQWxzbyB0aGUgb3V0Y29tZSBkb2Vzbid0IHNob3cgWzFdIG1lYW5pbmcgdGhhdCBpZiBpdCBpcyBhc3NpZ25lZCB0byBhbnkgdmFyaWFibGUgdGhlbiBpdCB3aWxsIHByaW50IE5VTEwgaW5zdGVhZCBvZiBwcmludGluZyBvdXQgdGhlIG9iamVjdC0NCmBgYHtyfQ0KYSA8LSBwcmludCgiUHJpbnQgZXhhbXBsZSIpDQpiIDwtIGNhdCgiQ2F0IGV4YW1wbGUiKQ0KYQ0KYiAgIyB3aWxsIHNob3cgTlVMTA0KYGBgDQojIyMjIGZpbGwNClRoZSBhcmd1bWVudCBmaWxsIGlzIGVpdGhlciBhIGxvZ2ljYWwgdmFyaWFibGUgb3IgYSBwb3NpdGl2ZSBudW1iZXIuICAgIA0KVGhlIGRlZmF1bHQgdmFsdWUgaXMgRkFMU0UuICAgDQpJZiBUUlVFLCBsaW5lIGJyZWFrcyBhcmUgc2V0IHdpdGggIlxcbiIgb3IgYSBicmVhayBpbiBhIHF1b3RlZCBzdHJpbmcuICAgICANCklmIGZpbGwgaXMgYSBwb3NpdGl2ZSBudW1iZXIsIHRoZSBudW1iZXIgaXMgdXNlZCB0byBzZXQgdGhlIHdpZHRoLiAgDQoNCmBgYHtyfQ0Kd29yZHM8LSBjKCdhJywnYicsJ2QnLCdlJykNCmZvciAoaSBpbiAxOjMpew0KY2F0KHdvcmRzLCBmaWxsPUYpDQp9DQpmb3IgKGkgaW4gMTozKXsNCmNhdCh3b3JkcywgZmlsbD1UKQ0KfQ0KY2F0KHdvcmRzLCBmaWxsPTEpDQpjYXQod29yZHMsIGZpbGw9NikNCmNhdCh3b3JkcywgZmlsbD00KQ0KYGBgDQojIyMjIHNlcA0KYGBge3J9DQpjYXQobW9udGgubmFtZVsxOjRdLCJcbiIpDQpjYXQobW9udGgubmFtZVsxOjRdLCBzZXA9ICcgPiAnKQ0KYGBgDQoNCioqQW4gYXBwbGljYXRpb24gb2YgY2F0KioNCmBgYHtyfQ0KbjwtYygtMTAsMCwxMCwxMDApDQpmb3IgKGkgaW4gbil7DQogIFI8LXJvdW5kKHJub3JtKDEwLGksMSkpDQogIGNhdCgnV2hlbiBNZWFuIGlzJyxpLCdcblJhbmRvbSBOdW1iZXJzOiAnLFIsJ1xuJywgZmlsbD1UKX0NCmBgYA0KDQotLS0NCg0KIyMjIHBhc3RlKCkNCkl0IGNvbnZlcnRzIGl0cyBhcmd1bWVudHMgdG8gY2hhcmFjdGVyIHN0cmluZ3MgdmlhIGFzLmNoYXJhY3Rlcg0KYGBge3J9IA0KcGFzdGUoJ0hpbWVsJywgNCs1LCAnRHVyam95JywgJ1JhZmknKSAgICMgYnkgZGVmYXVsdCBzZXA9JyAnDQpwYXN0ZShjKDE6NSwgNCwgOTkpKQ0KYGBgDQoNCnBhc3RlMCBpcyBlcXVpdmFsZW50IHRvIHBhc3RlKC4uLCBzZXA9JycpDQpgYGB7cn0NCnBhc3RlMCgnSGltZWwnLCA0KzUsJ0R1cmpveScsICdSYWZpJykNCmBgYA0KIyMjIyBzZXANCg0KYGBge3J9DQpwYXN0ZSgnSGltZWwnLCAnRHVyam95JywgJ1JhZmknLCBzZXA9JywgJykNCnBhc3RlKDE6MywnWUVTJywnTk8nLCBzZXA9JyAtICcpDQpgYGANCiMjIyMgY29sbGFwc2UNCmBgYHtyfQ0KcGFzdGUoYygxOjUsIDQsIDk5KSwgY29sbGFwc2U9JywgJykNCmBgYA0KDQojIyMjIGNvbGxhcHNlIHZzIHNlcA0KDQpgYGB7cn0NCnBhc3RlKGMoMTo1LCA0LCA5OSksIGMoJ25vdCcsJ2RvbmUnKSwgY29sbGFwc2U9JywgJykNCnBhc3RlKGMoMTo1LCA0LCA5OSksIGMoJ25vdCcsJ2RvbmUnKSwgc2VwPScsICcpDQpgYGANCioqVXNpbmcgcGFzdGUgaW5zaWRlIHByaW50KCkqKg0KYGBge3J9DQpwcmludCgxKzEsOCs4LDUtMikNCnByaW50KHBhc3RlKDErMSw4KzgsNS0yKSkNCmBgYA0KDQotLS0NCg0KIyMjIGZvcm1hdCgpDQoNCmBgYHtyfQ0KYSA8LSBzZXEoMSwxMjAwMCw5MDApDQpmb3JtYXQoYSkNCmBgYA0KIyMjIyB0cmltDQpgYGB7cn0NCmZvcm1hdChhLCB0cmltPVQpDQpgYGANCiMjIyMgZGlnaXRzDQpgYGB7cn0NCmIgPC0gYygxLjMsMS40MyxwaSkNCmZvcm1hdChiKQ0KZm9ybWF0KGIsIGRpZ2l0cz0zKQ0KZm9ybWF0KGIsIGRpZ2l0cz0xMikNCmBgYA0KIyMjIyBuc21hbGwNClRvIHN1Z2dlc3QgaG93IG1hbnkgZGVjaW1hbCBwbGFjZXMgdG8gc2hvdy0NCmBgYHtyfQ0KYiA8LSBjKDEuMywxLjQzLDEuNzg0KQ0KZm9ybWF0KGIpIA0KZm9ybWF0KGIsIG5zbWFsbD01KQ0KYGBgDQpJdCBjYW5ub3Qgcm91bmQgdGhlIHZhbHVlcy0NCmBgYHtyfQ0KZm9ybWF0KGIsIG5zbWFsbD0xKQ0KYGBgDQojIyMjIHdpZHRoDQpJdCBzdWdnZXN0cyBob3cgbG9uZyB0aGUgdG90YWwgY2hhcmFjdGVyIHN0cmluZyBzaG91bGQgYmUtDQpgYGB7cn0NCnByaW50KGIpDQpmb3JtYXQoYiwgd2lkdGg9NykNCmBgYA0KTGlrZSBuc21hbGwsIGl0IGNhbm5vdCBjdXQgYW55IHZhbHVlcy0NCmBgYHtyfQ0KZm9ybWF0KGIsIHdpZHRoPTEpDQpgYGANCiMjIyMganVzdGlmeQ0KYGBge3J9DQpkIDwtIGMoImEiLCJiIiwiYyIsImRydW5rIikNCmZvcm1hdChkLCBqdXN0aWZ5ID0gInJpZ2h0IikgDQpmb3JtYXQoZCwganVzdGlmeSA9ICJjZW50cmUiKSANCmBgYA0KQ29tYmluaW5nIHdpdGggY2F0IHdlIGNhbiBkaXNwbGF5IGl0IGluIGEgbW9yZSBjb252ZW5pZW50IHdheQ0KYGBge3J9DQpjYXQoZm9ybWF0KGQsIGp1c3RpZnkgPSAncmlnaHQnKSwgZmlsbD0xLCJcbiIpDQpjYXQoZm9ybWF0KGQsIGp1c3RpZnkgPSAnY2VudHJlJyksIGZpbGw9MSwiXG4iKQ0KY2F0KGZvcm1hdChkLCBqdXN0aWZ5ID0gJ2xlZnQnKSwgZmlsbD0xLCJcbiIpDQpgYGANCg0KLS0tDQoNCiMjIyBzcHJpbnRmKCkNCg0KRm9yIEMgbGlrZSBwcmludGluZyBmdW5jdGlvbi0NCmBgYHtyfQ0KYSA8LSAxMjsgYiA8LSBwaTsgYyA8LSAiU3RyaW5nIjsNCnNwcmludGYoIiVnIGFuZCAlLjRmIGFyZSBub3QgJXMiLGEsYixjKQ0KYGBgDQoNCg0K