学科: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 packages包含datasets是什么意思?
编辑- 解答: 任何一个R包都可以包含函数、数据集等内容,所以很多R包里面都含有数据集,载入数据集的方法是
library(R包名) data(数据集名) attach(数据集名)
问题:CRAN是什么?
编辑- 解答:CRAN是R的“综合档案馆”。
问题:x[x<-2]会有什么问题?
编辑- 解答: <-在牵涉到逻辑判断时,比如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 吗?
编辑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