gpt4 book ai didi

r - ->(右箭头)和 <-(左箭头)在 for 循环中的不同行为

转载 作者:行者123 更新时间:2023-12-04 00:54:43 25 4
gpt4 key购买 nike

Since R3.0 , 一个 for循环返回 NULL (如记录):

x <- for(i in 1:3) {i+1}
x
# NULL

但是,使用右箭头赋值,它似乎返回了最后一个值:

for(i in 1:3) {i+1} -> x
x
# [1] 4

documentation不评论 -> , 和 as pointed by Ben Bolker , ->似乎转换为 <-无论如何:

expression(1 -> x)
# expression(x <- 1)

所以我的问题是:

  1. 这是错误还是误解?
  2. 为什么 ->行为与 <- 不同在那种情况下,如果它们应该是相同的?

最佳答案

我认为这更像是一个解析问题。命令

for(i in 1:3) {i+1} -> x

实际上被解析成类似的东西

for(i in 1:3) {
x <- {i+1}
}

lobstr 包的帮助下,您可以在 AST 中看到它

lobstr::ast(for(i in 1:3) {i+1} -> x)
o-`for`
+-i
+-o-`:`
| +-1
| \-3
\-o-`<-`
+-x
\-o-`{`
\-o-`+`
+-i
\-1

所以赋值是循环体的一部分。例如,您也可以毫无错误地运行它

for(i in 1:3) {i+1} ^2

或者看看你从这个表达式中得到了什么

for(i in 1:3) {i+1} + {print(i)}
# [1] 1
# [1] 2
# [1] 3

循环体表达式不会在第一个大括号结束时终止。它在行尾结束(或者你可以让它以 ; 结束,或者将它嵌套在代码块中)。这在任何方面都不是赋值运算符所独有的。

所以这不是错误,只是语法有点困惑。你所期待的看起来更像

{for(i in 1:3) {i+1}} -> x

仍然返回 NULL。

关于r - ->(右箭头)和 <-(左箭头)在 for 循环中的不同行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63432936/

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