不,这并不奇怪。您使用命名和未命名对象调用 data.frame 的构造函数。
最初我认为data.frame 是一个列表并使用help(list) 来解释data.frame 的行为。即使哲学是相同的(命名和未命名的论点)这是一个错误,答案是在 data.frame 的帮助下
从 ?data.frame 我在这部分讨论参数的名称
如果参数都是命名的简单对象(不是列表、数据框矩阵),则参数名称给出列名。对于未命名的简单参数,参数的解析版本用作名称(删除了封闭的 I(...))。
所以
x<-data.frame(name<-c("n1","n2"),age<-c(5,6))
这相当于:
x <- data.frame(c("n1","n2"),c(5,6)) ## unnamed objects The functions return dotted pair list
name<-c("n1","n2")
age<-c(5,6)
那么对于 y
y<-data.frame(name=c("n1","n2"),age=c(5,6)) ## named objects functions return a list
但请注意,这仅解释了简单对象参数的命名过程。命名比添加一些点更复杂。例如,我发现这些 2 语句是等效的(使用 check.names=T 或 F)非常令人惊讶:
a <- data.frame(y <- list(x=1))
a <- data.frame(y = list(x=1))