R'yi üstel gösterim kullanmaya zorlama (örneğin e + 10)?


230

R'yi- e+10benzeri gösterimi kullanmak yerine normal sayılar kullanmaya zorlayabilir miyim ? Sahibim:

1.810032e+09
# and 
4

aynı vektör içinde ve görmek istiyorum:

1810032000
# and
4

Eski moda bir program için çıktı oluşturuyorum ve kullanarak bir metin dosyası yazmak zorundayım cat. Bu şimdiye kadar iyi çalışıyor ama e+10orada notasyonu kullanamıyorum .


Yanıtlar:


229

Bu biraz gri bir alan. R'nin her zaman bir yazdırma yöntemi çağıracağını ve bu yazdırma yöntemlerinin bazı seçenekleri dinlediğini hatırlamanız gerekir. 'Scipen' dahil - bilimsel gösterim için bir ceza. Gönderen help(options):

'scipen': tamsayı. Sabit veya üstel gösterimde sayısal değerleri yazdırmaya karar verirken uygulanacak bir ceza. Pozitif değerler sabit ve bilimsel gösterime karşı negatif yanlılık: 'scipen' rakamlarından daha geniş olmadığı sürece sabit gösterim tercih edilecektir.

Misal:

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

Bununla birlikte, hala beceriksiz buluyorum. En doğrudan yol, sprintf()mesela açık genişlikle kullanmaktır sprintf("%.5f", ran2).


1
Teşekkürler. scipen aradığım seçenek gibi görünüyor. Ürkütücü ceza açıklaması beni utandırdı. Ancak örneğiniz güzelce açıklıyor. sprintf, ha? bir hafta önce sprintf ile yaşadığım sıkıntılardan mı bahsediyorsun? :)
Matt Bannert

4
Rstudio'da, bir veri kümesini içe aktarır ve train_sample_10k = biçim (train_sample_10k, bilimsel = FALSE) ve yeniden yüklerseniz bilimsel gösterimleri değiştirir.
mixdev

Bunu yaptıktan sonra işleri normale nasıl döndürürüm?
AIM_BLB

6
@CSA: options("scipen"=0, "digits"=7)(bunlar varsayılan değerlerdir)
Scarabee

Sonucu elde eden options("scipen"=100, "digits"=4)kodu kodun üst kısmına ve altında olmayanı da uygun notlarla taşımalısınız. Hızlı bir çözüm arayan biri için kafa karıştırıcı olabilir (ve Google ilkini sonuç olarak gösterir).
xbsd

152

R'deki bilimsel gösterimi devre dışı bırakarak elde edilebilir.

options(scipen = 999)

4
Ayrıca, bu .Rprofile dosyanıza konabilir, böylece varsayılan olarak otomatik olarak yürütülür.
smci

75

En sevdiğim cevap:

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

Bu, R ayarlarında uğraşmak zorunda kalmadan istediğinizi verir.

Bir sayı nesnesi yerine bir karakter dizesi döndürdüğünü unutmayın


1
Hım bu garip, benim için çalışmıyor. Hata almıyorum, hala bilimsel gösterimi yazdırıyor.
Ovi

Neyin yanlış olabileceğinden emin değilim. R'nin çok eski (3.1.0) ve yeni (3.4.3) versiyonunu kontrol ettim ve her ikisinde de çalışıyor. Büyük olasılıkla bir yerde başka bir ayar öncelik kazanıyor veya R'de sürüme özgü veya kenar durumu hatası buldunuz. Sayısal bir nesne yerine bilimsel gösterimde bir dize beslemeniz mümkün mü? Bunu açıklar.
Danny

10
Belki de bunun sayı yerine bir karakter yarattığı dikkat çekicidir.
cengel

3
Vektörünüzdeki sayılar farklı uzunluklarda ise, kullandığınızdan emin olun, justified = "none"aksi takdirde bunları aynı uzunlukta dolduran boşluklar olacaktır.
Lauren Fitch

1
format(1e6, scientific=FALSE)döner "1000000"iken as.character(1e6)geri dönüş "1e+06", bu nedenle iki usul arasında bir fark vardır.
mickey

7

Put options(scipen = 999) your içinde .Rprofile dosyasında bu otomatik idam varsayılan olarak alır böylece . (Manuel olarak yapmaya güvenmeyin.)

(Bu diğer cevaplardan farklı bir şey söylüyor: nasıl?

  1. Bu, günlük veya aylık olarak birden fazla proje, birden fazla dil arasında dolaştığınızda işleri aklı başında tutar. Proje başına ayarlarınızı yazmayı hatırlamak hataya açıktır ve ölçeklenebilir değildir. Genel bir ~ / .Rprofile veya proje başına .Rprofile olabilir. Ya da her ikisi de, ikincisi öncekini geçersiz kılar.
  2. Tüm yapılandırmanızı proje çapında veya genel olarak tutmak .Rprofile onu otomatik olarak yürütür. Bu, örneğin varsayılan paket yükleri, data.table yapılandırması, çevre vb.

Neden tam olarak aynı cevap? stackoverflow.com/a/27318351/680068 Rprofile bitinden ayrı olarak, GingerJack'in cevabını daha iyi düzenleyebilir misiniz?
zx8754

@ zx8754: bu tam olarak aynı cevap değil: Önemli olan bu şeyleri .Rprofile'ınıza taşımaktır. O zaman asla unutamazsın. Ayrıca, zaman geçtikçe .Rprofile tüm özelleştirmelerinizi biriktirir.
smci

1
Tabii ki size kalmış, ancak Q "X yapmayı nasıl unutamam" değil, "X'i nasıl yapabilirim" dir.
zx8754

@ zx8754: Her gün birden fazla projede R ve Python / pandalar arasında sıkıştım. Her ikisinin de özelleştirmeleri, paket yolları vb. Var. Projeler arasında.
smci

1
@ zx8754: birden çok dilde birden fazla proje üzerinde çalışırken, "X'i nasıl yapabilirim" sorusu, ölçeklenebilir, tutarlı ve otomatik bir yolla "X'i nasıl yapmayı unutamam" ile birleşir. Daha fazla açıklama ekledim. Drive-by downvoter kim olursa olsun.
2018'de smci
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.