2012-12-29 22 views
9

Neyi başarmaya çalışıyorum, tüm basılı numaraların maksimum 7 hanesinde görüntülenmesidir. İşte ne istiyorum örnekleridir baskılı:Yazdırılan çok sayıda sıfırın durdurulması (bilimsel gösterim değil)

0,000000 (0,299180291884922 olan gerçek sayı ..... karşı)

0,299180 (0,000000000029481 olan gerçek sayı ..... karşı)

Ben options(scipen=99999) ve options(digits=6) kullanarak sayılar ikincisi türleri ile başarı elde ettik. Ancak, önceki örnek her zaman çok sayıda sıfır ve ardından sıfır olmayan beş basamak basacaktır. Bunun gerçekleşmesini nasıl engellerim ve istediğim sonucu elde ederim? Ayrıca bilimsel gösterim'u da istemiyorum.

Bunun, EVERY bağlamındaki TÜM baskılı numaralara uygulanmasını istiyorum. Örneğin bir matrisim varsa, A'u arayın ve bu matrisi yazdırıyorum, her elemanın sadece 6-7 basamak olmasını istiyorum. Her bağlamda her baskı için otomatik olmasını istiyorum; Tıpkı options(digits=6) ve options(scipen=99999)'u kullanmak, her içerik için otomatik hale getirir.

+0

Çok sayıda varsa, örneğin 123456789.87654321. Bilimsel gösterim kullanmıyorsanız, en fazla 7 basamak kullanarak nasıl yazdırabilirsiniz? – flodel

+0

@flodel İyi nokta. Belki de bu çok büyük sayıların bilimsel gösterim kullanmasını (veya 6 hanenin ötesine geçmesini) isterim. Fakat eğer sadece HER ANADOLU'yu kesen bir çözüm varsa, 6-7 rakamı yapar; Bu iyi, çünkü R konsolunda yazdırmam gereken büyük sayılarla çalışmam. – Jase

cevap

3

Tüm numaralariniz < 1? Basit bir sprintf("%.6f", x) deneyebilirsiniz. Aksi takdirde, basamak sayısını temel alarak sprintf ürününe sarmayı deneyebilirsiniz; Diğer ayrıntılar için ?sprintf numaralı telefonu kontrol edin.

+0

Bunun otomatik olarak her sayıdaki baskıya uygulanmasını istiyorum; 'Seçenekler (rakamlar = 6)' ya benzeyen bir çözüm, her bağlamda her nesne için geçerli ve sadece bir kere * ayarlamam gerekiyor. Her şey <1 değil, etkileşimli olarak yazmam gereken her şey * 100'dür. – Jase

10

Yazdırmak istediğiniz tür için yeni bir baskı yöntemi tanımlayabilirsiniz. Tüm sayılar çiftler ise çift kişilik (veya çiftlerde bir vektör) yazdırırken Örneğin, sen, Şimdi

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

oluşturabilir, fonksiyon print.double() yerine print.default() ait çağrılır. Yazdırmak istediğiniz türlere bağlı olarak, print.integer(), print.complex() vb. Benzer işlevleri oluşturmak zorunda kalabilirsiniz.

Varsayılan yazdırma yöntemine dönmek için, print.double() işlevini silin.