在 R 源代码中,大多数(但不是全部)函数使用整数值作为常量:
colnames <- function(x, do.NULL = TRUE, prefix = "col")
{
if(is.data.frame(x) && do.NULL)
return(names(x))
dn <- dimnames(x)
if(!is.null(dn[[2L]]))
dn[[2L]]
else {
nc <- NCOL(x)
if(do.NULL) NULL
else if(nc > 0L) paste0(prefix, seq_len(nc))
else character()
}
}
Run Code Online (Sandbox Code Playgroud)
R语言定义说:
在大多数情况下,整数和数值之间的差异并不重要,因为 R 在使用数字时会做正确的事情。然而,有时我们想显式地为常量创建一个整数值。
问题是关于良好实践和基本原理,而不是关于“L”符号本身、整数类和数字类之间的差异或比较数字。
我不能使用subset的参数xtabs或aggregate(或I测试,包括任何功能ftable和lm)用mapply。以下调用因subset参数而失败,但它们可以在没有的情况下工作:
mapply(FUN = xtabs,
formula = list(~ wool,
~ wool + tension),
subset = list(breaks < 15,
breaks < 20),
MoreArgs = list(data = warpbreaks))
# Error in mapply(FUN = xtabs, formula = list(~wool, ~wool + tension), subset = list(breaks < :
# object 'breaks' not found
#
# expected result 1/2:
# wool
# A B
# 2 2
#
# expected result 2/2:
# …Run Code Online (Sandbox Code Playgroud) 我有以下 data.frame:
x <- data.frame(A = c("Y", "Y", "Z", NA),
B = c(NA, TRUE, FALSE, TRUE),
C = c(TRUE, TRUE, NA, FALSE))
Run Code Online (Sandbox Code Playgroud)
我需要计算下表xtabs:
A B C
Y 1 2
Z 0 0
<NA> 1 0
Run Code Online (Sandbox Code Playgroud)
我被告知要使用na.action = NULL,它确实返回了我需要的表:
xtabs(formula = cbind(B, C) ~ A,
data = x,
addNA = TRUE,
na.action = NULL)
A B C
Y 1 2
Z 0 0
<NA> 1 0
Run Code Online (Sandbox Code Playgroud)
但是,na.action = na.pass返回一个不同的表:
xtabs(formula = cbind(B, C) ~ A, …Run Code Online (Sandbox Code Playgroud)