为什么使用 `data.frame` 函数组合两个 `data.frame` 对象会截断一个长变量名?

Why does combining two `data.frame` objects using the `data.frame` function cut off a long variable name?

我注意到,如果我尝试使用 data.frame 函数将两个不同的 data.frame 对象组合成一个更大的 data.frame,变量名称会被截断(即见输出names(db) 来自下面的代码。

我目前通过使用 data.table 函数组合变量来避免这种情况。

我的问题是:

为什么 data.frame 命令会截断我的变量名?这可能是一个非常简单的问题,可以通过在 data.table 对象上使用 as.data.frame 函数将其转换回 data.frame 轻松解决,但我很好奇为什么如果我只使用 data.frame 函数,变量名首先被截断。我曾尝试使用 R 和 Google 中的帮助寻找对此的深入了解,但到目前为止没有成功。我正在寻求更多答案,以帮助我更好地理解 R、data.tabledata.frame 的工作原理(因为我是一个相对较新的 R 用户,最近从 Stata 切换过来)。

提前致谢!

> a <- data.frame(rnorm(100))
> b <- data.frame(rnorm(100))
> names(a) <- "thisisaveryverylongvariablename-mean()"
> names(b) <- "thisisanotherveryverylongvariablename-std()"
> db <- data.frame(a, b)
> names(db)
[1] "thisisaveryverylongvariablename.mean.."      "thisisanotherveryverylongvariablename.std.."
> names(c(a, b))
[1] "thisisaveryverylongvariablename-mean()"      "thisisanotherveryverylongvariablename-std()"
> db2 <- data.table(a, b)
> names(db2)
[1] "thisisaveryverylongvariablename-mean()"      "thisisanotherveryverylongvariablename-std()"

变量名没有截断;简单地说,它们在 R 环境下变得更多 "compatible"。您可以使用 check.names=FALSE 参数覆盖它 data.frame():

a <- data.frame(rnorm(100))
b <- data.frame(rnorm(100))
names(a) <- "thisisaveryverylongvariablename-mean()"
names(b) <- "thisisanotherveryverylongvariablename-std()"
db <- data.frame(a, b, check.names = FALSE)
names(db)
# [1] "thisisaveryverylongvariablename-mean()"      "thisisanotherveryverylongvariablename-std()"