Buộc R không sử dụng ký hiệu số mũ (ví dụ e + 10)?


228

Tôi có thể buộc R sử dụng các số thông thường thay vì sử dụng e+10ký hiệu giống như không? Tôi có:

1.810032e+09
# and 
4

trong cùng một vectơ và muốn xem:

1810032000
# and
4

Tôi đang tạo đầu ra cho một chương trình lỗi thời và tôi phải viết một tệp văn bản bằng cách sử dụng cat. Điều đó hoạt động tốt cho đến nay nhưng tôi chỉ đơn giản là không thể sử dụng e+10ký hiệu ở đó.


Câu trả lời:


228

Đây là một chút của một khu vực màu xám. Bạn cần nhớ rằng R sẽ luôn gọi một phương thức in và các phương thức in này lắng nghe một số tùy chọn. Bao gồm 'scipen' - một hình phạt cho hiển thị khoa học. Từ help(options):

'scipen': số nguyên. Một hình phạt sẽ được áp dụng khi quyết định in các giá trị số theo ký hiệu cố định hoặc hàm mũ. Giá trị dương thiên về hướng cố định và tiêu cực đối với ký hiệu khoa học: ký hiệu cố định sẽ được ưu tiên trừ khi nó rộng hơn chữ số 'scipen'.

Thí dụ:

R> ran2 <- c(1.810032e+09, 4) 
R> options("scipen"=-100, "digits"=4)
R> ran2
[1] 1.81e+09 4.00e+00
R> options("scipen"=100, "digits"=4)
R> ran2
[1] 1810032000          4

Điều đó nói rằng, tôi vẫn thấy nó đáng tin cậy. Cách trực tiếp nhất là sử dụng sprintf()với chiều rộng rõ ràng, vd sprintf("%.5f", ran2).


1
Cảm ơn. scipen dường như là lựa chọn mà tôi đang tìm kiếm. Những lời giải thích về hình phạt ma quái làm tôi ngại ngùng. Nhưng ví dụ của bạn giải thích nó độc đáo. chạy nước rút hả? bạn đang đề cập đến những rắc rối tôi với sprintf một tuần trước? :)
Matt Bannert

4
Trong rstudio, nếu bạn nhập tập dữ liệu và thực hiện train_sample_10k = format (train_sample_10k, khoa học = FALSE) và tải lại, nó sẽ thay đổi các ký hiệu khoa học.
mixdev

Làm thế nào để tôi trở lại mọi thứ bình thường sau khi đã làm điều này?
AIM_BLB

6
@CSA: options("scipen"=0, "digits"=7)(đó là các giá trị mặc định)
Scarabee

Bạn nên di chuyển cái đạt được kết quả options("scipen"=100, "digits"=4)lên đầu mã và cái không nằm dưới nó ... với các ghi chú thích hợp. Nó có thể gây nhầm lẫn cho một người đang tìm kiếm một giải pháp nhanh chóng (và Google hiển thị kết quả đầu tiên là kết quả).
xbsd

152

Nó có thể đạt được bằng cách vô hiệu hóa ký hiệu khoa học trong R.

options(scipen = 999)

4
Hơn nữa, điều này có thể được đặt trong tệp .Rprofile của bạn để nó được thực thi tự động theo mặc định.
smci

74

Câu trả lời yêu thích của tôi:

format(1810032000, scientific = FALSE)
# [1] "1810032000"

Điều này mang lại những gì bạn muốn mà không cần phải thực hiện trong cài đặt R.

Lưu ý rằng nó trả về một chuỗi ký tự chứ không phải là một đối tượng số


1
Hừm, thật lạ, nó không hiệu quả với tôi. Tôi không gặp lỗi, nó vẫn in ký hiệu khoa học.
Ovi

Không chắc chắn những gì có thể sai. Tôi đã kiểm tra phiên bản R rất cũ (3.1.0) và mới (3.4.3) và nó hoạt động với cả hai. Rất có thể một số cài đặt khác ở đâu đó đang được ưu tiên hoặc bạn đã tìm thấy một lỗi phiên bản cụ thể hoặc trường hợp cạnh trong R. Có thể bạn đang cung cấp cho nó một chuỗi trong ký hiệu khoa học chứ không phải là một đối tượng số? Điều đó sẽ giải thích nó.
Daniel

10
Có lẽ đáng chú ý là điều này tạo ra một nhân vật thay vì số.
cengel

3
Nếu các số trong vectơ của bạn có độ dài khác nhau, hãy đảm bảo sử dụng justified = "none"nếu không sẽ có khoảng trắng đệm chúng với cùng độ dài.
Lauren Fitch

1
format(1e6, scientific=FALSE)trả về "1000000"trong khi as.character(1e6)trả về "1e+06", do đó có sự khác biệt giữa hai phương thức.
mickey

7

Đặt options(scipen = 999) trong tệp .Rprofile của bạn để nó được tự động thực thi theo mặc định . (Đừng dựa vào việc làm thủ công.)

(Đây là nói một cái gì đó khác với câu trả lời khác: làm thế nào?

  1. Điều này giúp mọi thứ trở nên lành mạnh khi bạn tìm kiếm giữa nhiều dự án, nhiều ngôn ngữ hàng ngày hoặc hàng tháng. Nhớ nhập vào cài đặt theo từng dự án của bạn là dễ bị lỗi và không thể mở rộng. Bạn có thể có toàn cầu ~ / .Rprofile hoặc mỗi dự án .Rprofile. Hoặc cả hai, với cái sau ghi đè lên cái trước.
  2. Giữ tất cả cấu hình của bạn trong toàn bộ dự án hoặc toàn cầu .Rprofile tự động thực thi nó. Điều này hữu ích cho ví dụ tải gói mặc định, cấu hình data.table, môi trường, v.v. Một lần nữa, cấu hình đó có thể chạy đến một trang cài đặt và không có cơ hội bạn sẽ nhớ chúng và cú pháp của chúng và nhập chúng vào

Tại sao chính xác cùng một câu trả lời? stackoverflow.com/a/27318351/680068 Ngoài bit Rprofile, có thể chỉnh sửa câu trả lời của GingerJack tốt hơn?
zx8754

@ zx8754: đó không phải là cùng một câu trả lời: điểm quan trọng là chuyển công cụ này sang .Rprofile của bạn. Sau đó, bạn không bao giờ có thể quên nó. Ngoài ra, khi thời gian trôi qua .Rprofile của bạn tích lũy tất cả các tùy chỉnh của bạn.
smci

1
Tất nhiên tùy thuộc vào bạn, nhưng Q không phải là "làm thế nào tôi không thể quên làm X" mà là "làm thế nào tôi có thể làm X".
zx8754

@ zx8754: Tôi tìm kiếm giữa R và Python / gấu trúc trên nhiều dự án hàng ngày. Cả hai đều có các tùy chỉnh, đường dẫn gói, v.v ... Nó thực sự giữ mọi thứ lành mạnh để có một tệp cấu hình chung lưu trữ chúng. Trên khắp các dự án.
smci

1
@ zx8754: khi bạn đang làm việc trên nhiều dự án trên nhiều ngôn ngữ, câu hỏi "làm thế nào tôi có thể làm X" kết hợp với "làm thế nào tôi không thể quên làm X", theo cách tự động, nhất quán, có thể mở rộng. Tôi chỉ cần thêm lời giải thích. Đối với bất cứ ai là downvoter drive-by.
smci
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.