print vs. cat

Published onesixx on

https://stat.ethz.ch/pipermail/r-help/2004-September/056974.html
https://stackoverflow.com/questions/36699272/why-is-message-a-better-choice-than-print-in-r-for-writing-a-package
https://stackoverflow.com/questions/31843662/what-is-the-difference-between-cat-and-print
what is th diffence among “cat”,”print”and”format”

비슷한 기능의 함수들

  • print()
  • cat()
  • message()
  • warning()
  • stop()
  • alert()

print()

대부분은 print()를 많이 사용하게 될것이다. print(obj, “문장”, quote=F)
cat 과 달리, invisible(x)를 통해 parameter(변수)의 argument(값) 를 return할 수 있다. 
(cat은 NULL을 return한다.)

> k <- 16

> print(k)  #[1] 16
> cat(k)    #16

# 2개 이상의 obj를 print하는 경우,
# paste()를 사용해야 원하는 대로 출력된다. 
> print(str_c("k==>",k))
[1] "k==>16"
> attributes(k)$class <- "foo"
> print(k)
[1] 16
attr(,"class")
[1] "foo"

> cat('k==>', k, '\
')
k==> 16 
> k <- 16


# print는 제일 앞에 obj, String만 콘솔 출력된다.
# 앞과 뒤의 형식이 다른 경우,
# 처음이 문자인 경우에는 첫 문자만 찍히지만
# 처음이 숫자이고 뒤가 문자인 경우에는 오류 발생  
> print("k==>",k)
[1] "k==>"
> print(k,"k==>")
Error in print.default(k, "k==>") : invalid printing digits -2147483648
In addition: Warning message:
In print.default(k, "k==>") : NAs introduced by coercion


> cat(str_c('k==>', k), '\
')
k==>16 

argument를 return할수 있는 기능이 있기 때문에, pipe와 함께 사용하면 유용할 때가 있다.

coefs <- lm(Sepal.Width ~  Petal.Length, iris) %>%
         print() %>%
         coefficients()

cat()

cat은 기본적인 type(logical, integer, real, complex, character) 을 바로 console에 찍을때 유용하다.
object 따위는 알지못한다.  
cat(“문장”, 오브젝트, 수식, sep=””, paste())

> cat(" foo \
 ")
 foo 
> cat(' "foo"\
 ')
 "foo"
> cat(" 'foo'\
 ")
 'foo'
http://wolfpack.hannam.ac.kr/Stat_Notes/softwares/software_index.html

print()와 달리

  • 개행(줄바꿈)이 없다.
  • “” 출력 없다.
  • 여러인자를(문자, 숫자..) 구별없이 화면에 잘 찍힌다.
sink("foobar.txt")
 cat(' foo \
')
 cat(' bar ')
sink()

#또는
cat('foo', 'bar', file="foobar.txt", sep="\
")

#또는
cat('foo\
', file="foobar.txt", append=T)
cat('bar\
', file="foobar.txt", append=T)

foobar.txt 파일 생성

Categories: R Reshaping

onesixx

Blog Owner

Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x