R.如何使用T和F而不是TRUE和FALSE
当R用户想要写入逻辑值时,他们可以使用T和F代替TRUE和FALSE,但R输出总是长版本,TRUE和FALSE 有没有办法强迫R使用T和F来代替?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
我的意思是在所有输出中使用它,包括将对象保存到文件时 它更整洁,在屏幕和文件中占用更少的空间 我知道我可以用“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