我想知道为什么在分配=
时使用<-
和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
答案 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