R.如何使用T和F代替TRUE和FALSE

ska*_*kan 0 r logical-operators

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

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

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

我知道我可以将所有TRUE替换为"T",将所有FAL替换为"F",但这不会很好,因为它不会再被识别为逻辑,而是文本.

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

Fr.*_*Fr. 5

您似乎对TRUE和 的FALSE存储方式感到困惑:

\n\n
> x <- sample(c(TRUE, FALSE), 100, replace = TRUE)\n\n> object.size(x)\n440 bytes\n\n> y <- sample(c(0L, 1L), 100, replace = TRUE)\n\n> object.size(y)\n440 bytes\n
Run Code Online (Sandbox Code Playgroud)\n\n

逻辑值存储为0L(“逻辑零”)和1L(“逻辑一”)。

\n\n

存储与屏幕上对象的“外观”无关:

\n\n
> object.size(0L)\n48 bytes\n> object.size(0)\n48 bytes\n> object.size(F)\n48 bytes\n> object.size(FALSE)\n48 bytes\n
Run Code Online (Sandbox Code Playgroud)\n\n

\xe2\x80\xa6 这意味着您不会丢失磁盘空间。

\n\n

唯一会丢失磁盘空间的情况是TRUE/FALSE在 CSV 文件中另存为文本,例如 \xe2\x80\x93,在这种情况下,请将其另存为0/1

\n


Rol*_*and 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
Run Code Online (Sandbox Code Playgroud)

如您所见,隐式打印不会对非对象执行方法调度(主要原因是性能),如果不更改C代码并重新编译R,我们无法做任何事情.您可以创建自己的S3类,但那不会很方便.

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