R이 지수 표기법 (예 : e + 10)을 사용하지 않도록 강제합니까?


228

R이 e+10-와 같은 표기법 을 사용하는 대신 일반 숫자를 사용하도록 할 수 있습니까 ? 나는 가지고있다:

1.810032e+09
# and 
4

같은 벡터 내에서보고 싶어 :

1810032000
# and
4

구식 프로그램에 대한 출력을 작성 중이며를 사용하여 텍스트 파일을 작성해야합니다 cat. 그것은 지금까지 잘 작동하지만 나는 단순히 그 e+10표기법을 사용할 수 없습니다 .


답변:


228

이것은 약간 회색 영역입니다. R은 항상 인쇄 메소드를 호출하고 이러한 인쇄 메소드는 일부 옵션을 수신한다는 것을 기억해야합니다. 과학 디스플레이에 대한 벌칙 인 'scipen'포함. 보낸 사람 help(options):

'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와 관련된 문제를 언급하고 있습니까? :)
Matt Bannert

4
rstudio에서 데이터 세트를 가져오고 train_sample_10k = format (train_sample_10k, scientific = FALSE) 및 다시로드하면 과학적 표기법이 변경됩니다.
mixdev

이 작업을 수행 한 후에 어떻게 정상 상태로 되돌 립니까?
AIM_BLB

6
@CSA : options("scipen"=0, "digits"=7)(이것이 기본값입니다)
Scarabee

결과 options("scipen"=100, "digits"=4)를 달성하는 것을 코드의 맨 위로 옮기고 그 아래에없는 것을 옮기십시오 . 빠른 솔루션을 찾고있는 사람에게는 혼란 스러울 수 있습니다 (Google은 결과적으로 첫 번째 솔루션을 보여줍니다).
xbsd


74

내가 가장 좋아하는 답변 :

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

이것은 R 설정에서 고민하지 않고도 원하는 것을 제공합니다.

숫자 객체가 아닌 문자열을 반환합니다.


1
흠, 그것은 이상하지 않습니다. 나는 오류가 발생하지 않으며 여전히 과학적 표기법을 인쇄합니다.
Ovi

무엇이 잘못 될 수 있는지 잘 모르겠습니다. 나는 매우 오래된 (3.1.0) 및 새로운 (3.4.3) 버전의 R을 체크인했으며 둘 다에서 나를 위해 작동합니다. 어딘가에 다른 설정이 우선하거나 R에서 버전 특정 또는 엣지 케이스 버그를 발견했을 가능성이 큽니다. 숫자 객체 대신 과학적 표기법으로 문자열을 제공 할 수 있습니까? 그것은 그것을 설명 할 것입니다.
Danny

10
아마도 이것은 숫자 대신 문자를 만듭니다.
cengel

3
벡터의 숫자가 길이가 justified = "none"다른 경우 사용 하거나 같은 길이로 채워지는 공백이 있는지 확인하십시오 .
Lauren Fitch

1
format(1e6, scientific=FALSE) 보고 "1000000" while as.character(1e6)returns "1e+06"이므로 두 방법간에 차이가 있습니다.
mickey

7

기본적으로 자동 실행되도록 .Rprofile 파일을 넣으십시오 options(scipen = 999) . . (수동으로 수행하지 마십시오.)

(이것은 다른 답변과 다른 것을 말하고 있습니다 : 어떻게?

  1. 이렇게하면 매일 또는 매월 여러 프로젝트, 여러 언어간에 썽크 할 때 상황이 제대로 유지됩니다. 프로젝트 별 설정을 입력하면 오류가 발생하기 쉽고 확장 할 수 없습니다. 전역 ~ ​​/ .Rprofile 또는 프로젝트 당 .Rprofile을 가질 수 있습니다. 또는 두 가지 모두 후자가 전자보다 우선합니다.
  2. 모든 구성을 프로젝트 전체 또는 전역 .Rprofile에 유지하면 자동으로 실행됩니다. 예를 들어 기본 패키지로드, data.table 구성, 환경 등에 유용합니다. 다시 한 번 해당 구성이 설정 페이지로 실행될 수 있으며 해당 구성 및 구문을 기억하고 입력 할 가능성이 없습니다.

왜 정확히 같은 대답입니까? stackoverflow.com/a/27318351/680068 Rprofile 비트 외에도 GingerJack의 답변을 더 잘 편집 할 수 있습니까?
zx8754

@ zx8754 : 정확히 같은 대답은 아닙니다. 결정적인 요점은이 물건을 .Rprofile으로 옮기는 것입니다. 그러면 절대 잊을 수 없습니다. 또한 시간이 지남에 따라 .Rprofile은 모든 사용자 정의를 축적합니다.
smci

1
물론 당신에게 달려 있지만 Q는 "X를하는 것을 잊을 수없는 방법"이 아니라 "X를 할 수있는 방법"입니다.
zx8754

@ zx8754 : 나는 매일 여러 프로젝트에서 R과 Python / pandas 사이에 뭉쳤다. 둘 다 사용자 정의, 패키지 경로 등이 있습니다. 실제로 하나의 공통 구성 파일을 저장하도록 제정신을 유지합니다. 프로젝트 간.
smci

1
@ zx8754 : 여러 언어로 된 여러 프로젝트에서 작업 할 때 "X를 어떻게 할 수 있습니까?"라는 질문은 확장 가능하고 일관된 자동 방식으로 "X를하는 것을 잊을 수없는 방법"과 병합됩니다. 방금 추가 설명을 추가했습니다. drive-by downvoter는 누구에게나.
smci
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.