In chuỗi và nội dung biến trên cùng một dòng trong R


198

Có cách nào để in văn bản và nội dung biến trên cùng một dòng không? Ví dụ,

wd <- getwd()
print("Current working dir: ", wd)

Tôi không thể tìm thấy bất cứ điều gì về cú pháp cho phép tôi làm điều này.

r  printing 

Câu trả lời:


299

Bạn có thể sử dụng pastevớiprint

print(paste0("Current working dir: ", wd))

hoặc là cat

cat("Current working dir: ", wd)

8
Bạn có thể muốn sep = ''hoặc bạn sẽ có thêm một không gian.
hadley

8
Sử dụng cat()tôi nhận được một NULLkết thúc :(
ragesz

5
@ragesz Tôi chỉ nhận được null ở cuối nếu bạn đặt con mèo vào trong một bản in như: print(cat("test", var)) đó làcat("test", var)
Spidfire

62

{keo} cung cấp nội suy chuỗi tốt hơn nhiều, xem câu trả lời khác của tôi . Ngoài ra, như Dainis đề cập một cách đúng đắn, sprintf()không phải là không có vấn đề.

Ngoài ra còn có sprintf():

sprintf("Current working dir: %s", wd)

Để in ra đầu ra giao diện điều khiển, sử dụng cat()hoặc message():

cat(sprintf("Current working dir: %s\n", wd))
message(sprintf("Current working dir: %s\n", wd))

Một lựa chọn tốt đẹp khác! Điều này rất giống với các ngôn ngữ kịch bản lệnh khác và rất thuận tiện nếu bạn có một văn bản nơi bạn muốn thực hiện nhiều biến. Cảm ơn!

1
cho đến nay là tùy chọn thuận tiện nhất, đặc biệt nếu bạn đang soạn thảo một đối số hàm. với dán nó nhanh chóng trở thành một mớ hỗn độn không thể đọc được.
dùng27636

2
Lưu ý rằng sprintfkhông in, nó chỉ định dạng chuỗi. Một cái gì đó như in (sprintf (...)) là cần thiết trong các tập lệnh.
CHS

22

Hoặc sử dụng message

message("Current working dir: ", wd)

@ câu trả lời của agstudy là phù hợp hơn ở đây


17

Cách dễ nhất để làm điều này là sử dụng paste()

> paste("Today is", date())
[1] "Today is Sat Feb 21 15:25:18 2015"

paste0() sẽ dẫn đến kết quả như sau:

> paste0("Today is", date())
[1] "Today isSat Feb 21 15:30:46 2015"

Lưu ý rằng không có ngăn cách mặc định giữa chuỗi và x. Sử dụng khoảng trắng ở cuối chuỗi là cách khắc phục nhanh:

> paste0("Today is ", date())
[1] "Today is Sat Feb 21 15:32:17 2015"

Sau đó kết hợp một trong hai chức năng với print()

> print(paste("This is", date()))
[1] "This is Sat Feb 21 15:34:23 2015"

Hoặc là

> print(paste0("This is ", date()))
[1] "This is Sat Feb 21 15:34:56 2015"

Như những người dùng khác đã nêu, bạn cũng có thể sử dụng cat()


14

Gói {keo} cung cấp phép nội suy chuỗi. Trong ví dụ, {wd}được thay thế bằng nội dung của biến. Biểu thức phức tạp cũng được hỗ trợ.

library(glue)

wd <- getwd()
glue("Current working dir: {wd}")
#> Current working dir: /tmp/RtmpteMv88/reprex46156826ee8c

Được tạo vào ngày 2019-05-13 bởi gói reprex (v0.2.1)

Lưu ý cách đầu ra được in không chứa các [1]tạo phẩm và "dấu ngoặc kép mà các câu trả lời khác sử dụng cat().


8

Như những người dùng khác đã nói, cat () có lẽ là lựa chọn tốt nhất.

@krlmlr đề xuất sử dụng sprintf () và hiện tại đây là câu trả lời được xếp hạng thứ ba. sprintf () không phải là một ý tưởng tốt. Từ tài liệu R:

Chuỗi định dạng được truyền xuống chức năng sprintf của HĐH và các định dạng không chính xác có thể khiến chuỗi sau bị lỗi trong quá trình R.

Không có lý do chính đáng để sử dụng sprintf () trên mèo hoặc các tùy chọn khác.


2

bạn có thể sử dụng phương thức paste0 hoặc cat để kết hợp chuỗi với các giá trị biến trong R

Ví dụ:

paste0("Value of A : ", a)

cat("Value of A : ", a)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.