2016-01-19 50 views
-1

我只是學會了使用'length<-'一種新的方式應用函數 是這樣的:左側分配功能如何工作?

l<- list(c(1,1,2,2,2),c(1,2),c(1,2,2,2),c(1,2,2)) 
sapply(l, `length<-`, 6) 

創建一個4x6的矩陣,

 [,1] [,2] [,3] [,4] 
[1,] 1 1 1 1 
[2,] 1 2 2 2 
[3,] 2 NA 2 2 
[4,] 2 NA 2 NA 
[5,] 2 NA NA NA 
[6,] NA NA NA NA 

,通過本身就是很酷。但是我意識到,

`length<-`(l[[1]],6) 

不會改變l[[1]],使

lapply(l, `length<-`, 6) 

不會改變l

我想知道是否每個接受賦值的函數都是這種情況,如'dim<-''attr<-'等。如果是這樣,是否在R解析器中編寫了一個行爲?

回答

1

length(x) <- 6不只是做"length<-"(x, 6)而是x <- "length<-"(x, 6)。這是R.的功能如何工作請參閱`levels<-`(What sorcery is this?中的第一個答案

在您的第一個示例中,sapply創建了一個新矩陣,您將向我們顯示。在第二個示例中,"length<-"將創建一個長度爲6的新矢量,但不會將其分配給任何名稱。