บังคับให้ R ไม่ใช้สัญลักษณ์แทน (เช่น e + 10)?


228

ฉันสามารถบังคับให้ R ใช้ตัวเลขปกติแทนที่จะใช้e+10เครื่องหมายเหมือนได้หรือไม่ ฉันมี:

1.810032e+09
# and 
4

ภายในเวกเตอร์เดียวกันและต้องการดู:

1810032000
# and
4

catฉันสร้างเอาท์พุทสำหรับโปรแกรมแบบเก่าและฉันต้องเขียนแฟ้มข้อความโดยใช้ มันใช้งานได้ดี แต่ฉันก็ไม่สามารถใช้e+10สัญลักษณ์ที่นั่น


ที่เกี่ยวข้อง: stackoverflow.com/q/3978266/134830
Richie Cotton

คำตอบ:


228

นี่เป็นพื้นที่สีเทาเล็กน้อย คุณต้องระลึกว่า R จะเรียกใช้วิธีการพิมพ์เสมอและวิธีการพิมพ์เหล่านี้ฟังตัวเลือกบางอย่าง รวมถึง 'scipen' - บทลงโทษสำหรับการแสดงผลทางวิทยาศาสตร์ จากhelp(options):

'scipen': จำนวนเต็ม บทลงโทษที่จะนำมาใช้เมื่อตัดสินใจที่จะพิมพ์ค่าตัวเลขในสัญกรณ์คงที่หรือชี้แจง ค่าอคติเชิงบวกที่มีต่อการแก้ไขและการลบต่อสัญกรณ์วิทยาศาสตร์: จะต้องใช้สัญกรณ์แบบคงที่ยกเว้นว่ามีมากกว่าตัวเลข 'scipen' ที่กว้างกว่า

ตัวอย่าง:

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

ที่กล่าวว่าฉันยังคงพบว่ามันช่างน่าเบื่อหน่าย ทางตรงที่สุดคือการใช้กับอย่างชัดเจนเช่นความกว้างsprintf()sprintf("%.5f", ran2)


1
ขอบคุณ ดูเหมือนว่า scipen จะเป็นตัวเลือกที่ฉันต้องการ คำอธิบายการลงโทษที่น่ากลัวทำให้ฉันเขินอาย แต่ตัวอย่างของคุณอธิบายได้ดี sprintf ใช่มั้ย คุณหมายถึงปัญหาของฉันกับ sprintf สัปดาห์ที่ผ่านมา? :)
Matt Bannert

4
ใน rstudio ถ้าคุณนำเข้าชุดข้อมูลและทำ train_sample_10k = รูปแบบ (train_sample_10k, scientific = FALSE) และโหลดใหม่มันจะเปลี่ยนสัญกรณ์ทางวิทยาศาสตร์
mixdev

ฉันจะคืนสิ่งต่าง ๆ เป็นปกติหลังจากทำสิ่งนี้ได้อย่างไร
AIM_BLB

6
@CSA: options("scipen"=0, "digits"=7)(ค่าเหล่านี้คือค่าเริ่มต้น)
Scarabee

คุณควรย้ายรายการที่ได้ผลลัพธ์options("scipen"=100, "digits"=4)ไปด้านบนสุดของรหัสและรหัสที่ไม่ได้อยู่ด้านล่าง ... ด้วยโน้ตที่เหมาะสม อาจสร้างความสับสนให้กับคนที่กำลังมองหาวิธีแก้ปัญหาอย่างรวดเร็ว (และ Google แสดงผลลัพธ์แรก)
xbsd

152

มันสามารถทำได้โดยการปิดการใช้งานสัญกรณ์ทางวิทยาศาสตร์ในอาร์

options(scipen = 999)

4
ยิ่งไปกว่านั้นสิ่งนี้สามารถใส่ในไฟล์. profileของคุณเพื่อให้มันถูกเรียกใช้งานโดยอัตโนมัติ
smci

74

คำตอบที่ฉันชอบ:

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

สิ่งนี้ให้สิ่งที่คุณต้องการโดยไม่ต้องวุ่นวายกับการตั้งค่า R

โปรดทราบว่ามันจะส่งกลับสตริงตัวอักษรมากกว่าวัตถุจำนวน


1
หืมแปลกไปมันใช้ไม่ได้สำหรับข้า ฉันไม่ได้รับข้อผิดพลาดมันก็ยังพิมพ์สัญลักษณ์ทางวิทยาศาสตร์
Ovi

ไม่แน่ใจว่าเกิดอะไรขึ้น ฉันตรวจสอบในเวอร์ชันเก่า (3.1.0) และ R (3.4.3) เวอร์ชันใหม่และมันใช้ได้สำหรับฉันทั้งคู่ เป็นไปได้ว่าการตั้งค่าอื่น ๆ บางแห่งมีความสำคัญมากกว่าหรือคุณพบข้อผิดพลาดเฉพาะรุ่นหรือ edge-case ใน R เป็นไปได้หรือไม่ที่คุณป้อนสตริงในสัญกรณ์วิทยาศาสตร์แทนที่จะเป็นวัตถุตัวเลข? นั่นจะอธิบายมัน
Danny

10
อาจสังเกตได้ว่าสิ่งนี้สร้างตัวละครแทนจำนวน
cengel

3
หากตัวเลขในเวกเตอร์ของคุณมีความยาวต่างกันตรวจสอบให้แน่ใจว่าได้ใช้งานjustified = "none"ไม่เช่นนั้นจะมีช่องว่างภายในที่มีความยาวเท่ากัน
Lauren Fitch

1
format(1e6, scientific=FALSE)ส่งคืน"1000000"ขณะที่as.character(1e6)ส่งคืน"1e+06"ดังนั้นจึงมีความแตกต่างระหว่างสองวิธี
มิกกี้

7

ใส่options(scipen = 999) ไว้ในไฟล์ .Rprofileจึงได้รับอัตโนมัติดำเนินการโดยเริ่มต้น (อย่าพึ่งพาการทำด้วยตนเอง)

(นี่เป็นการพูดอะไรที่แตกต่างจากคำตอบอื่น ๆ : อย่างไร?

  1. สิ่งนี้จะช่วยให้สิ่งต่าง ๆ มีชีวิตชีวาเมื่อคุณทำงานระหว่างหลายโครงการหลายภาษาเป็นรายวันหรือรายเดือน การจำให้พิมพ์ในการตั้งค่าต่อโครงการของคุณจะเกิดข้อผิดพลาดและไม่สามารถปรับขนาดได้ คุณสามารถมีโกลบอล ~ / .Rprofile หรือต่อโครงการ. Rprofile หรือทั้งสองอย่างด้วยหลังที่เหนือกว่าอดีต
  2. การกำหนดค่าทั้งหมดของคุณไว้ในโครงการ. rprofile ทั่วโลกหรือทำงานอัตโนมัติ สิ่งนี้มีประโยชน์สำหรับเช่นการโหลดแพ็คเกจเริ่มต้นการกำหนดค่า data.table สภาพแวดล้อม ฯลฯ อีกครั้งการกำหนดค่านั้นสามารถเรียกใช้ไปยังหน้าการตั้งค่าและไม่มีโอกาสที่คุณจะจำสิ่งเหล่านั้นและไวยากรณ์และพิมพ์ลงใน

ทำไมคำตอบเดียวกันทั้งหมด? stackoverflow.com/a/27318351/680068นอกจากบิต Rprofile แล้วบางทีอาจจะดีกว่าที่จะแก้ไขคำตอบของ GingerJack?
zx8754

@ zx8754: มันไม่ใช่คำตอบเดียวกัน: จุดสำคัญคือย้ายสิ่งนี้ไปยัง. profile ของคุณ จากนั้นคุณจะไม่มีวันลืมมัน นอกจากนี้เมื่อเวลาผ่านไปโปรไฟล์กำไรของคุณจะรวบรวมการปรับแต่งทั้งหมดของคุณ
smci

1
แล้วแต่คุณ แต่ Q ไม่ใช่ "ฉันจะลืม X ได้อย่างไร" แต่ "ฉันจะทำ X ได้อย่างไร"
zx8754

@ zx8754: ฉันชอบอยู่ระหว่าง R และ Python / pandas ในหลาย ๆ โครงการทุกวัน ทั้งคู่มีการปรับแต่งเส้นทางแพกเกจ ฯลฯ มันทำให้สิ่งต่าง ๆ มีสติเพื่อให้มีไฟล์กำหนดค่าทั่วไปหนึ่งไฟล์ที่เก็บไว้ ข้ามโครงการ
smci

1
@ zx8754: เมื่อคุณกำลังทำงานในหลายโครงการในหลายภาษาคำถาม "ฉันจะทำ X อย่างไร" ผสานกับ "ฉันจะไม่ลืมที่จะทำ X" ด้วยวิธีอัตโนมัติที่ปรับขนาดได้และสอดคล้องกัน ฉันเพิ่งเพิ่มคำอธิบายเพิ่มเติม สำหรับใครก็ตามที่เป็นคนขับรถลง -
smci
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.