R用户在想要写入逻辑值时可以使用T和F而不是TRUE和FALSE,但R输出始终是长版本,TRUE和FALSE。
有没有办法强迫R使用T和F代替? 我的意思是在所有输出中使用它,包括将对象保存到文件时?
它更整洁,屏幕和文件占用的空间更少。
我知道我可以替换" T"的所有TRUE,以及" F"的所有FALSE但这不会很好,因为它不再被认为是合乎逻辑的,而是文本。
我认为T和F不允许在曲目包中使用,但这是另一个故事。
答案 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类,但这不会很方便。
对于文件导出,您可以使用类似的更改为字符向量的策略,但您需要实际更改它,并且不能使用print
或format
方法。我会明确地这样做,而不是通过S3方法。
答案 1 :(得分:2)
您似乎对TRUE
和FALSE
的存储方式感到困惑:
> 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
。