學科:R語言入門/問與答討論園地
外觀
> gl(2, 5, labels = c("female", "male") ) > gl(2, 5, labels = c('female', 'male') )
- 解答:在這裡,gl函數中單引號和雙引號沒區別。
- 通常兩者是沒有區別的,都是用來表示字符串。不過當字符串內容包含引號時就有區別了,單引號表示的字符串里可以包含雙引號,反之亦然。如果同時有單引號和雙引號,則需要用反斜槓做轉義了。舉例:
> "A string contains single quote (')" [1] "A string contains single quote (')" > 'A string contains double quote (")' [1] "A string contains double quote (\")" > "A string contains both single quote (') and double quote (\")" [1] "A string contains both single quote (') and double quote (\")" > 'Another string contains both single quote (\') and double quote (")' [1] "Another string contains both single quote (') and double quote (\")"
- 解答: 任何一個R包都可以包含函數、數據集等內容,所以很多R包裡面都含有數據集,載入數據集的方法是
library(R包名) data(数据集名) attach(数据集名)
- 解答:CRAN是R的「綜合檔案館」。
- 解答: <-在牽涉到邏輯判斷時,比如x[x<-2]會出現問題。
set.seed(123) x=rnorm(10) x[x<-2] x[x=2] x[x<(-2)]
- Q1: =和<-有什麼區別
- A1: =是傳值 <-是賦值符號.兩者通常情況下是等價的.但部分情況不同. func(x=1)與func(x<-1)是有區別的,前者調用完後變量x不會被保留,而後者會在工作區里保留變量x=1。
- Q2: 在學習中我發現R中經常出現這樣的賦值,例如: dim(a)<-c(2,4) 這種賦值是否有特殊的名字?是否所有的函數都可以這樣賦值?函數支持逆運算嗎?
- A2: 參見"Software for data analysis"第5章
- 1)x[1:2] <- c(1,2)這種形式叫Replacement expression: "an assignment where the left side is not a name but an expression, identifying some aspect of the object we want to change."
- 2) dim(x)<-c(1,2)叫replacement function,等價於"dim<-"。 參見http://stat.ethz.ch/R-manual/R-devel/library/base/html/dim.html
- 3)另見http://cran.r-project.org/doc/manuals/R-lang.html#Subset-assignment
- 其他觀點:
- 觀點一:不認為兩者有重要的區別
- 觀點二:在函數內部,只有「<-」才能實現賦值,「=」不能,其他地方好像兩個是等價的。
備註:本節內容來自 http://cos.name/cn/topic/107719
dim(m)<-c(2,5) 會改變m?真奇怪。在Java, Python等編程語言的標準函數中,這樣做是不可想象的。
- 解答:dim(m) 其實是獲取了 m 的 dim 屬性,而這裡的賦值是修改了這個屬性,而沒有修改 m 本身(至少沒有修改其數值內容)。它只是告訴 R,以後在處理 m 時,該把它當作什麼來用。例如:
> m <- 1:10 > m # 这里 m 中存了 10 个数字 [1] 1 2 3 4 5 6 7 8 9 10 > dim(m) # 一开始,它的 dim 属性是空的 NULL > dim(m) <- c(2,5) > m # 修改 dim 属性后,m 里存放的仍然是数字1到10,但解析方法不同了,被当作matrix来用了。 [,1] [,2] [,3] [,4] [,5] [1,] 1 3 5 7 9 [2,] 2 4 6 8 10 > attributes(m) # 可以看到,m 多了一个 dim 的属性 $dim [1] 2 5 > dim(m) <- c(5,2) # 你可以再次改变这个属性,让它以另外一种方式来使用这10个数字 > m # 其实在 m 里面存放的数字,连顺序都没有发生变化 [,1] [,2] [1,] 1 6 [2,] 2 7 [3,] 3 8 [4,] 4 9 [5,] 5 10 > dim(m) <- NULL # 还可以把这个属性给清掉 > m # 又回到初始的样子了 [1] 1 2 3 4 5 6 7 8 9 10 > attributes(m) # 属性没有了 NULL