在R中分配数据帧时使用'='与'< - '运算符的不同行为

时间:2012-07-26 18:56:41

标签: r dataframe columnname

  

可能重复:
  Assignment operators in R: '=' and '<-'

我想知道为什么在分配=时使用<-dataframe之间存在差异。

案例a:使用=

set.seed(100);a <- data.frame(a1=rnorm(10),a2=sample(c(1,0),10,replace=TRUE))

案例b:使用<-

set.seed(100);b <- data.frame(b1 <- rnorm(10),b2 <- sample(c(1,0),10,replace=TRUE))

为什么会出现以下差异?为什么第二种方法没有保留变量/列名?

> a
           a1 a2
1 -0.50219235  0
2  0.13153117  0
3 -0.07891709  1
4  0.88678481  1
5  0.11697127  0

>b
  b1....rnorm.5. b2....sample.c.1..0...5..replace...TRUE.
1    -0.50219235                                        0
2     0.13153117                                        0
3    -0.07891709                                        1
4     0.88678481                                        1
5     0.11697127                                        0

3 个答案:

答案 0 :(得分:7)

如果查看?'data.frame',您会看到以下第一个参数:

“...这些参数是表单值或tag = value。组件名称是根据标记(如果存在)或deparsed参数本身创建的。”

如果你使用'&lt; - '而不是'=',data.frame()会将你的输入读作表达式(将rnorm(10)指定给a1),而不是 value (rnorm(10))被分配到标签(a1)

答案 1 :(得分:6)

在函数内,'='用作命名或将函数引用到特定名称的变量,&lt; - 引用赋值函数。当R运行时,它将首先解析函数参数中的'&lt; - “函数。然后它将变量命名为等号左边的东西或者本例中的完整表达式”b1&lt; - rnorm(10) “。最后它将解析函数(在本例中为data.frame)。

您几乎总是希望在函数中使用'='。在某些情况下,您可能希望嵌套作业“&lt; - ”但通常这会使您的代码难以阅读。

答案 2 :(得分:6)

只是为了添加@Paul和@Edward以前的(非常好的)答案,这是你在<-内使用=而不是data.frame()的结果。也就是说,您已经创建了两个新对象:

> b1
Error: object 'b1' not found
> b2
Error: object 'b2' not found
> set.seed(100);b <- data.frame(b1 <- rnorm(10),b2 <- sample(c(1,0),10,replace=TRUE))
> 
> b1
 [1] -0.50219235  0.13153117 -0.07891709  0.88678481  0.11697127  0.31863009 -0.58179068  0.71453271 -0.82525943 -0.35986213
> b2
 [1] 0 0 0 0 1 1 0 0 0 1