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

R.如何使用T和F而不是TRUE和FALSE,r,logical-operators,R,Logical Operators,当R用户想要写入逻辑值时,他们可以使用T和F代替TRUE和FALSE,但R输出总是长版本,TRUE和FALSE 有没有办法强迫R使用T和F来代替? 我的意思是在所有输出中使用它,包括将对象保存到文件时 它更整洁,在屏幕和文件中占用更少的空间 我知道我可以用“T”替换所有的true,用“F”替换所有的false,但这并不好,因为它不再被认为是合乎逻辑的,而是文本 我认为cran包中不允许使用T和F,但这是另一回事。您似乎对TRUE和FALSE的存储方式感到困惑: > x <- samp

当R用户想要写入逻辑值时,他们可以使用T和F代替TRUE和FALSE,但R输出总是长版本,TRUE和FALSE

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

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

我知道我可以用“T”替换所有的true,用“F”替换所有的false,但这并不好,因为它不再被认为是合乎逻辑的,而是文本


我认为cran包中不允许使用T和F,但这是另一回事。

您似乎对
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
…这意味着您不会丢失磁盘空间


唯一会丢失磁盘空间的情况是将
TRUE/FALSE
保存为CSV文件中的文本,例如–在这种情况下,将其另存为
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

x您应该始终使用TRUE和FALSE@skan-这是一个过度的例子,但是你也可以做
T你必须为每个用例制定一个特殊的方法。一个好的开始是为
print.logical
编写一个自定义方法。我不知道如何修改,比如说
write.csv
,来处理这个(糟糕的想法)行为,但是看看
write.table
code,看起来您需要在C中做一些修改并重新编译。一些人指出,要避免使用
T
F
,而不是
TRUE
FALSE
。这个建议对于代码来说是很好的,但是对于输出来说可能是不够的!我不是指内存中的对象大小,而是指打印在屏幕上以及保存在csv文件中的字符大小。如果data.frame包含30列,则如果使用长名称(如TRUE或FALSE),您将无法正确查看它。如果您的“文件”都是CSV,只需使用
作为.integer重新编码到
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