ska*_*kan 0 r logical-operators
R用户在想要写入逻辑值时可以使用T和F而不是TRUE和FALSE,但R输出始终是长版本,TRUE和FALSE.
有没有办法强迫R使用T和F代替?
我的意思是在所有输出中使用它,包括将对象保存到文件时?
它更整洁,屏幕和文件占用的空间更少.
我知道我可以将所有TRUE替换为"T",将所有FAL替换为"F",但这不会很好,因为它不会再被识别为逻辑,而是文本.
我认为T和F不允许在曲目包中,但这是另一个故事.
您似乎对TRUE和 的FALSE存储方式感到困惑:
> 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\nRun Code Online (Sandbox Code Playgroud)\n\n逻辑值存储为0L(“逻辑零”)和1L(“逻辑一”)。
存储与屏幕上对象的“外观”无关:
\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\nRun Code Online (Sandbox Code Playgroud)\n\n\xe2\x80\xa6 这意味着您不会丢失磁盘空间。
\n\n唯一会丢失磁盘空间的情况是TRUE/FALSE在 CSV 文件中另存为文本,例如 \xe2\x80\x93,在这种情况下,请将其另存为0/1。
要在屏幕上打印,您可以这样做:
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类,但那不会很方便.
对于文件导出,您可以使用类似的更改为字符向量的策略,但您需要实际更改它并且不能使用print或format方法.我会明确地这样做,而不是通过S3方法.