这与R 中的赋值运算符有关: '=' 和 '<-';但是,那里没有回答我的问题。
链接的问题和答案解释了 using (编者注:链接的答案中实际上并未说明,如果已说明,那将是错误的。如果您就参数列表的评估发表了声明,并将其限制为从全局环境中调用此类函数,则可能是正确的。)<-
inside of a function 声明了用户工作区中的变量赋值,以便在调用函数后可以使用该变量。
这似乎可以解释以下行为差异。以下代码data frame
完全符合预期:
A <- data.frame(
Sub = rep(c(1:3),each=3),
Word = rep(c('Hap','Lap','Sap'),3),
Vowel_Length = sample(c(1:100),9)
)
结果是:
Sub Word Vowel_Length
1 1 Hap 31
2 1 Lap 2
3 1 Sap 71
4 2 Hap 58
5 2 Lap 28
6 2 Sap 20
7 3 Hap 78
8 3 Lap 72
9 3 Sap 77
但是,如果我们<-
在函数内部使用data.frame()
,如下所示,我们会得到不同的结果。
B <- data.frame(
Sub <- rep(c(1:3),each=3),
Word <- rep(c('Hap','Lap','Sap'),3),
Vowel_Length <- sample(c(1:100),9)
)
这个结果是:
Sub....rep.c.1.3...each...3. Word....rep.c..Hap....Lap....Sap....3.
1 1 Hap
2 1 Lap
3 1 Sap
4 2 Hap
5 2 Lap
6 2 Sap
7 3 Hap
8 3 Lap
9 3 Sap
Vowel_Length....sample.c.1.100...9.
1 31
2 15
3 4
4 2
5 89
6 55
7 12
8 72
9 47
我假设,因为[见评论。]<-
在函数内部使用全局声明变量,然后data frame
从该全局声明继承的标头,正如链接的问题和答案似乎表明的那样。
但是,我很好奇为什么你会得到,例如,Sub....rep.c.1.3...each...3.
作为第一列的标题data frame
而不是Sub <- rep(c(1:3),each=3),
,甚至是代替1 1 1 2 2 2 3 3 3
。
更新:
正如@AnandaMahto 在已删除的评论中指出的那样,设置check.names
为FALSE
会产生以下行为。
C <- data.frame(
Sub <- rep(c(1:3),each=3),
Word <- rep(c('Hap','Lap','Sap'),3),
Vowel_Length <- sample(c(1:100),9),
check.names=FALSE
)
结果在哪里:
Sub <- rep(c(1:3), each = 3) Word <- rep(c("Hap", "Lap", "Sap"), 3)
1 1 Hap
2 1 Lap
3 1 Sap
4 2 Hap
5 2 Lap
6 2 Sap
7 3 Hap
8 3 Lap
9 3 Sap
Vowel_Length <- sample(c(1:100), 9)
1 15
2 3
3 82
4 33
5 99
6 53
7 89
8 77
9 47
为了澄清,我的问题只是为什么会发生这种行为。特别是,为什么你会得到Sub....rep.c.1.3...each...3.
一个标题而Sub <- rep(c(1:3),each=3),
不是.1 1 1 2 2 2 3 3 3
check.names=TRUE
现在,我想我也很好奇你为什么会得到Sub <- rep(c(1:3),each=3),
标题check.names=FALSE
?