2017-01-06 18 views
1

Rユーザーは、TRUEの代わりにTとFを使用できますが、Rの出力は常にTRUEとFALSEの長いバージョンです。R. TRUEとFALSEの代わりにTとFを使用する方法

RにTとFを代わりに使用する方法はありますか?
オブジェクトをファイルに保存するときを含め、すべての出力で使用することを意味しますか?

これははるかにきれいで、画面やファイルのスペースが少なくて済みます。

"T"のすべてのTRUEと "F"のすべてのFALSEを置き換えることができますが、これは論理的には認識されず、代わりにテキストになるため、これはうまくいかないことがわかります。

TとFはクランパッケージでは許可されていないと思いますが、これは別の話です。

+4

常にTRUEとFALSEを使用する必要があります – HubertL

+0

なぜ、私はHubertLですか? – skan

+0

'T < - FALSE'を試してから、' TRUE < - FALSE'を試してください。 – thelatemail

答えて

2

あなたはどのようにTRUEFALSEが保存されているように見える混乱:

> x <- sample(c(TRUE, FALSE), 100, replace = TRUE) 

> object.size(x) 
440 bytes 

> y <- sample(c(0L, 1L), 100, replace = TRUE) 

> object.size(y) 
440 bytes 

論理値が0L( "論理ゼロ")と1L( "論理1")として格納されています。あなたはディスクスペースを失っていないことを意味している...

> object.size(0L) 
48 bytes 
> object.size(0) 
48 bytes 
> object.size(F) 
48 bytes 
> object.size(FALSE) 
48 bytes 

ストレージは、画面上のオブジェクトの「見た目」から独立しています。

ディスク容量を失うのは、をテキストとしてCSVファイルに保存することです(その場合は、0/1として保存してください)。あなたがこれを行うことができ、画面上で印刷するための

+0

私はメモリ上のオブジェクトのサイズを意味するのではなく、スクリーンに印刷されたときやcsvファイルに保存されたときの文字のサイズを意味しました。 TRUEまたはFALSEなどの長い名前を使用している場合、30列のdata.frameがあると正しく表示できません。 – skan

+1

あなたの "ファイル"がすべてCSVの場合は、単にas.integerを使って '0/1'に再コード化してください。画面ビューの場合、答えは、画面上のオブジェクトを「印刷」するために使用している方法によって異なります。 –

+0

あなたを落としたのは私ではありませんでした。私は決して助けようとしている誰かをdownvote決してない – skan

6

x <- c(TRUE, FALSE) 
class(x) 
#[1] "logical" 

print.logical <- function(x, ...) { 
    print.default(c("F", "T")[x + 1L], quote = FALSE, ...) 
} 

format.logical <- function(x, ...) { 
    format.default(c("F", "T")[x + 1L], ...) 
} 


print(x) 
#[1] T F 
x 
#[1] TRUE FALSE 
format(x) 
#[1] "T" "F" 

DF <- data.frame(a = 1:2, b = c(FALSE, TRUE)) 
DF 
# a b 
#1 1 F 
#2 2 T 

ご覧のとおり、暗黙の印刷は非オブジェクトに対するメソッドディスパッチを行う(その主な理由は、パフォーマンスです)、そこではありません私たちはCコードを変更せずにRを再コンパイルすることはできません。独自のS3クラスを作成することはできますが、それはあまり便利ではありません。

ファイルをエクスポートする場合、文字ベクトルに変更する同様の方法を使用できますが、実際には変更する必要があり、printまたはformatメソッドを使用することはできません。私はそれを明示的に行い、S3の方法ではしません。

関連する問題