gpt4 book ai didi

r - R 函数内部赋值运算符 ('=' 和 '<-' 的行为

转载 作者:行者123 更新时间:2023-12-01 19:39:29 25 4
gpt4 key购买 nike

这与 Assignment operators in R: '=' and '<-' 有关;但是,我的问题在那里没有得到解答。

链接的问题和答案解释了使用 <-在函数内部声明用户工作区中的变量赋值,以便在调用函数后可以使用变量。(编者注:链接的答案中实际上没有说明,如果说明了,这是错误的。如果你做出关于参数列表评估的声明并将其限制为从全局环境调用此类函数,它可能是正确的。)

这似乎可以解释以下行为差异。以下代码生成 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 的 header 是从该全局声明继承的,就像链接的问题和答案似乎表明的那样。 [查看评论。]

但是,我很好奇你为什么会得到,例如,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.namesFALSE产生以下行为。

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 3check.names=TRUE .

现在,我想我也很好奇为什么你得到Sub <- rep(c(1:3),each=3),作为 check.names=FALSE 的标题?

最佳答案

您的问题似乎与 R 最终使用的奇怪命名有关,并且您想知道为什么它没有空格、< 等。

如果这是您的实际问题,您应该查看 data.frame 中的 check.names 参数。

来自 ?data.frame:

check.names logical. If TRUE then the names of the variables in the data frame are checked to ensure that they are syntactically valid variable names and are not duplicated. If necessary they are adjusted (by make.names) so that they are.

因此,您可以通过将 check.names 设置为 FALSE 来获得您期望的名称:

B <- 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)
B
# 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 33
# 2 20
# 3 5
# 4 83
# 5 99
# 6 79
# 7 58
# 8 46
# 9 44

关于r - R 函数内部赋值运算符 ('=' 和 '<-' 的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18621423/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com