2012-11-27 47 views
20

Câu hỏi: Tôi làm cách nào để sử dụng paste mà không cần 100000 trở thành 1e+05?Làm cách nào để dán 100000 mà không bị rút ngắn xuống 1e + 05?

Xin lỗi trước nếu câu hỏi này có vẻ phù phiếm (nhưng nó đã dẫn đến lỗi trong mã của tôi). Tôi sử dụng R để gọi một kịch bản bên ngoài, vì vậy khi tôi nói ví dụ paste("abc",100000) Tôi muốn nó xuất ra "abc 100000" chứ không phải "abc 1e+05".

Dưới đây là một ví dụ về những gì nó trông giống như trên màn hình của tôi:

> paste("abc",100000) 
[1] "abc 1e+05" 
> paste("abc",100001) 
[1] "abc 100001" 

Điều này dẫn đến những hành vi kỳ lạ rằng kịch bản của tôi làm việc cho đầu vào "100001", nhưng không phải là "100000".

Tôi nhận ra mình có thể tạo tập lệnh để chuyển đổi số thành chuỗi nhưng tôi thích, nhưng tôi cảm thấy mình không nên làm điều này nếu có cách nội bộ để làm điều tương tự (tôi nghi ngờ có một số "phương pháp" thiếu).

[Nếu nó giúp, tôi đang trên Ubuntu 12.04.1 LTS ("chính xác"), chạy R phiên bản 2.14.1 (2011-12-22) trong một thiết bị đầu cuối.]

Trả lời

22

Xem ?options, đặc biệt scipen:

R> paste("abc", 100000) 
[1] "abc 1e+05" 
R> options("scipen"=10) # set high penalty for scientific display 
R> paste("abc", 100000) 
[1] "abc 100000" 
R> 

Ngoài ra, kiểm soát chặt chẽ định dạng theo cách cũ-trường qua sprintf():

R> sprintf("%s %6d", "abc", 100000) 
[1] "abc 100000" 
R> 
+0

Hoặc chỉ cần đặt "100000" trong dấu ngoặc kép quá ... – neilfws

11

Ngoài ra, bạn có thể sử dụng số nguyên mà don' t được in bằng ký hiệu khoa học. Bạn có thể chỉ định rằng số của bạn là một số nguyên bằng cách đặt một "L" đằng sau nó, hoặc làm as.integer.

> paste("abc",100000L) 
[1] "abc 100000" 
> paste("abc",as.integer(1000000000)) 
[1] "abc 1000000000" 
6

Ngoài ra format có thể đơn giản hơn sprintf đặc biệt là khi bạn muốn thay đổi cách thập phân được hiển thị:

> paste("abc",format(100000, scientific = FALSE)) 
[1] "abc 100000" 
> paste("abc",format(0.1234567, scientific = FALSE, digits = 4)) 
[1] "abc 0.1235" 
Các vấn đề liên quan