2012-07-26 389 views
2

可能重複:
Assignment operators in R: '=' and '<-'不同的行爲,使用「=」與「< - 」操作,而R中分配一個數據幀

我想知道爲什麼是有區別的在分配dataframe時使用=<-

案例一:使用=

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 
+4

在data.frame()創建中不是使用'<-'的明智之處。 – 2012-07-26 18:59:29

回答

6

在功能「=」被用作命名或參照該函數特定名稱和<的變量 - 指分配功能。當R運行時,它將首先在你的函數參數中解析「< - 」函數,然後它將把變量命名爲等號左邊的東西,或者在這種情況下將全稱表達式命名爲「b1 < - rnorm(10)」。最後它會解析函數(在這種情況下是data.frame)。

你幾乎總是希望在函數中使用'='。可能會出現一些情況,你可能想嵌套一個賦值「< - 」但是通常這會讓你的代碼可笑閱讀。

+0

很好的答案。歡迎來到SO! – 2012-07-26 19:34:42

+0

+1 for _ridiculous to read_ – 2012-07-27 01:03:58

7

如果你看一下?'data.frame',你會看到的第一個參數如下:

」 ......這些參數用表格值或標籤=值的組件名稱創建基於在標籤上(如果有的話)或者分析的參數本身。「

如果使用 '< - ' 而不是 '=',data.frame()被讀取您的輸入作爲表達(分配RNORM(10)a1)中,而不是作爲一個(RNORM (10))被分配給標籤(A1)

6

只是爲了增加通過@保羅和@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 
+0

(+1)有趣! – 2012-07-26 19:36:32

+0

作業是否進入父母或全球環境? – 2012-07-27 04:18:16

+0

@ sebastian-c該作業進入父級環境(不是全球環境)。 – 2015-07-21 17:39:13

相關問題