2012-12-29 37 views
9

Điều tôi đang cố gắng đạt được là có tất cả các số được in hiển thị tối đa 7 chữ số. Dưới đây là ví dụ về những gì tôi muốn in:Dừng một số lượng lớn số không được in (không phải ký hiệu khoa học)

0,000000 (so với con số thực tế đó là ,000000000029481 .....)

0,299180 (so với con số thực tế đó là ,299180291884922 .....)

Tôi đã thành công với các loại số sau bằng cách sử dụng options(scipen=99999)options(digits=6). Tuy nhiên, ví dụ trước sẽ luôn in một số lượng lớn các số không theo sau bởi năm chữ số khác 0. Làm cách nào để ngăn điều này xảy ra và đạt được kết quả mong muốn? Tôi cũng không muốn ký hiệu khoa học.

Tôi muốn điều này áp dụng cho TẤT CẢ số được in trong ngữ cảnh MỌI. Ví dụ nếu tôi có một số ma trận, gọi nó là A và tôi in ma trận này, tôi muốn mọi phần tử chỉ có 6-7 chữ số. Tôi muốn điều này được tự động cho mọi bản in trong mọi ngữ cảnh; giống như sử dụng options(digits=6)options(scipen=99999) làm cho nó tự động cho mọi ngữ cảnh.

+0

Điều gì sẽ xảy ra nếu bạn có số lượng lớn, ví dụ 123456789.87654321. Làm thế nào bạn có thể in nó bằng cách sử dụng tối đa 7 chữ số nếu bạn không sử dụng ký pháp khoa học ?! – flodel

+0

@flodel Điểm tốt. Có lẽ tôi muốn những con số này rất lớn để sử dụng ký hiệu khoa học (hoặc mở rộng vượt quá 6 chữ số). Nhưng nếu chỉ tồn tại một giải pháp cắt tỉa mọi loại gỗ làm 6-7 chữ số; đó là tốt, vì tôi không bao giờ làm việc với số lượng lớn mà tôi cần phải in trong giao diện điều khiển R. – Jase

Trả lời

3

Tất cả các số của bạn < 1? Bạn có thể thử một đơn giản sprintf("%.6f", x). Nếu không, bạn có thể thử gói mọi thứ vào sprintf dựa trên số chữ số; kiểm tra ?sprintf để biết thêm chi tiết.

+0

Tôi muốn điều này tự động áp dụng cho mọi bản in số duy nhất; một giải pháp tương tự như 'options (digits = 6)' ở chỗ nó chỉ áp dụng cho mọi đối tượng trong mọi ngữ cảnh và tôi chỉ cần đặt nó * một lần *. Không phải mọi thứ đều <1, nhưng mọi thứ * mà tôi cần in tương tác * là <100. – Jase

10

Bạn có thể xác định phương thức in mới cho loại bạn muốn in. Ví dụ, nếu tất cả các số của bạn là đôi, bạn có thể tạo

print.double=function(x){sprintf("%.6f", x)} 

Bây giờ, khi bạn in một đôi (hoặc một vector của đôi), hàm print.double() sẽ được gọi thay vì print.default().

Bạn có thể phải tạo các chức năng tương tự print.integer(), print.complex(), v.v., tùy thuộc vào loại bạn cần in.

Để trở về phương thức in mặc định, chỉ cần xóa hàm print.double().

Các vấn đề liên quan