R.如何使用T和F而不是TRUE和FALSE

时间:2017-01-06 00:08:37

标签: r logical-operators

R用户在想要写入逻辑值时可以使用T和F而不是TRUE和FALSE,但R输出始终是长版本,TRUE和FALSE。

有没有办法强迫R使用T和F代替? 我的意思是在所有输出中使用它,包括将对象保存到文件时?

它更整洁,屏幕和文件占用的空间更少。

我知道我可以替换" T"的所有TRUE,以及" F"的所有FALSE但这不会很好,因为它不再被认为是合乎逻辑的,而是文本。

我认为T和F不允许在曲目包中使用,但这是另一个故事。

2 个答案:

答案 0 :(得分:5)

要在屏幕上打印,您可以这样做:

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类,但这不会很方便。

对于文件导出,您可以使用类似的更改为字符向量的策略,但您需要实际更改它,并且不能使用printformat方法。我会明确地这样做,而不是通过S3方法。

答案 1 :(得分: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(&#34;逻辑0&#34;)和1L(&#34;逻辑1&#34;)。

存储独立于&#34;外观&#34;屏幕上的对象:

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

...这意味着您不会丢失磁盘空间。

只有丢失磁盘空间的情况才是将TRUE/FALSE保存为CSV文件中的文本 - 例如,将其另存为0/1