cat
chỉ hợp lệ cho các loại nguyên tử (logic, số nguyên, thực, phức tạp, ký tự) và tên. Điều đó có nghĩa là bạn không thể gọi số cat
trên danh sách không trống hoặc bất kỳ loại đối tượng nào. Trong thực tế, nó chỉ đơn giản là chuyển đổi các đối số thành các ký tự và ghép lại để bạn có thể nghĩ ra một số thứ như as.character() %>% paste()
.
print
là một hàm chung để bạn có thể xác định triển khai cụ thể cho một lớp S3 nhất định.
> foo <- "foo"
> print(foo)
[1] "foo"
> attributes(foo)$class <- "foo"
> print(foo)
[1] "foo"
attr(,"class")
[1] "foo"
> print.foo <- function(x) print("This is foo")
> print(foo)
[1] "This is foo"
Sự khác biệt giữa cat
và in được trả về giá trị. cat
trả lại vô hình NULL
trong khi print
trả về đối số của nó. tài sản của print
này làm cho nó đặc biệt hữu ích khi kết hợp với ống:
coefs <- lm(Sepal.Width ~ Petal.Length, iris) %>%
print() %>%
coefficients()
Phần lớn thời gian những gì bạn muốn là print
. cat
lon hữu ích cho những thứ như viết một chuỗi sang file:
sink("foobar.txt")
cat('"foo"\n')
cat('"bar"')
sink()
Như pointed bởi baptiste bạn có thể sử dụng cat
để chuyển hướng đầu ra trực tiếp đến nộp. Vì vậy, tương đương với trên sẽ là một cái gì đó như thế này:
cat('"foo"', '"bar"', file="foobar.txt", sep="\n")
Nếu bạn muốn viết dòng từng bước bạn nên sử dụng append
luận:
cat('"foo"', file="foobar.txt", append=TRUE)
cat('"bar"', file="foobar.txt", append=TRUE)
So với sink
cách tiếp cận nó là xa là Verbose cho hương vị của tôi , nhưng nó vẫn là một lựa chọn.
Xem ở đây: https://stat.ethz.ch/pipermail/r-help/2004-September/056972.html –
có thể trùng lặp của [Sự khác biệt giữa các chuỗi ký tự ghép với dán() so với cat()?] (http://stackoverflow.com/questions/12775085/the-difference-between-concatenating-character-strings-with-paste- vs-cat) – MichaelChirico