【发布时间】:2011-09-02 16:45:47
【问题描述】:
我想知道 R 中的赋值运算符 "=" 和 "<-" 之间是否存在技术差异。那么,如果我使用它会有什么不同吗:
示例 1:a = 1 或 a <- 1
示例 2:a = c(1:20) 或 a <- c(1:20)
感谢您的帮助
斯文
【问题讨论】:
标签: r
我想知道 R 中的赋值运算符 "=" 和 "<-" 之间是否存在技术差异。那么,如果我使用它会有什么不同吗:
示例 1:a = 1 或 a <- 1
示例 2:a = c(1:20) 或 a <- c(1:20)
感谢您的帮助
斯文
【问题讨论】:
标签: r
是的,有。 '=' 的帮助页面是这样说的:
运算符
带有“可以使用”的帮助文件意味着在这里分配一个对象。在函数调用中,您不能使用= 分配对象,因为= 意味着在那里分配参数。
基本上,如果您使用<-,那么您将分配一个可以在当前环境中使用的变量。例如,考虑:
matrix(1,nrow=2)
这只是一个 2 行矩阵。现在考虑:
matrix(1,nrow<-2)
这也为您提供了一个两行矩阵,但现在我们还有一个名为 nrow 的对象,其计算结果为 2!发生的情况是,在第二次使用中,我们没有分配参数nrow2,而是分配了一个对象nrow2,并将其发送到matrix 的第二个参数,恰好是nrow。
至于已编辑的问题。两者都是一样的。使用= 或<- 会引起很多关于哪个最好的讨论。许多风格指南提倡<-,我同意这一点,但请在<- 分配周围保留空格,否则它们会变得很难解释。如果你不使用空格(你应该使用,除了在 Twitter 上),我更喜欢=,并且永远不要使用->!
但实际上,只要您的选择始终如一,您使用什么并不重要。在一行上使用=,在下一行使用<-会导致代码非常难看。
【讨论】:
= 和<- 赋值都是在同一个环境中评估的,说= 只能在顶层使用是绝对错误的。
matrix(1,nrow=2) 要求有一个名为nrow 的参数,你把nrow=2 放在哪个位置都没有关系,因为它是一个关键字参数,而如果您改为写nrow<-2,则将其放在哪个位置确实很重要,因为不是突然之间是位置参数而不是关键字参数吗?如果是这样,我想也很容易将表达式 nrow<-2 误解为关键字参数而不是位置参数,因此应该在函数调用中避免使用该表达式?