R语言学习②——R对象
R 语言学习②
——R对象
@Miss Kirio
①R 语言中有两个主要概念:对象和函数。
R对象可以看做是具有关联名称的存储空间。R中的一切都存储在一个对象中。所有的变量、数据、函数等都是以命名对象的形式存储在计算机的内存中。
函数是一种用来进行某个操作的特殊类型的R对象。它们通常接受一些输入参数,通过执行一系列的操作产生结果(它们通常由其他函数来调用)。R已经有大量的函数可供使用,但稍后还可将看到,用户还可以创建新的函数。
·对象名称可以包括任何大写字母、小写字母、数字0~9(不能用于名称的开头)以及和字母作用相似的符号“· ”。注意,在R中的名称是区分大小写的。->如果遇到“找不到对象的错误”,应该首先检查错误的对象名称的正确性。
·所有对象都有模式(mode)和长度属性。模式决定了存储在对象中的数据类型。一个对象的长度是它含有元素的数量。可以用length()函数来获取。
·对象除了可以设置为v,还可以设置为v1这种。
②向量:
向量是R中最基本的数据对象。甚至当把单一数字赋给一个对象(如x<-45.3)时,也就是创建了一个包含单个元素的向量。所有对象都有模式(mode)和长度属性。模式决定了存储在对象中的数据类型。
向量用来存储一组基本类型相同的数据。R的主要基本数据类型是字符型、逻辑型、数值型、复数型。因此,向量可以是字符型、逻辑值型(T、F,或者TRUE、FALSE)、数值型和复数型。一个对象的长度是它含有元素的数量。可以用length()函数来获取。
(·一个向量的所有元素都必须属于相同的模式,因为上面提到「向量用来存储一组基本类型(字符型、逻辑型、数值型、复数型)相同的数据」。如果不是,R将强制执行类型转换。)
「·字符型是由单引号或双引号包含的字符串。」
·在大多数情况下,使用长度大于1的向量。可以在R中使用c( )函数和相应的参数来创建一个向量。
·所有的向量可以包含一个特殊值,即NA,该值代表缺失值。
·R允许创建空向量:
x<-vector( )
如果使用不存在的索引来添加向量元素,就可以改变向量的长度。例如,创建空向量x后,可以输入
x[3]<-45
x
[1] NA NA 45
批注:
注意,向量的前两个元素有未知的值NA。这种灵活性是有代价的。与其他编程语言不同,如果在R中使用一个不存在的向量位置,不会得到错误。
③字符、函数解释:
1 .ls( ) 列举出所有对象
2. rm( ) 删除对象
3·R中使用赋值运算符把内容存储到对象中。赋值运算符: <-
4.·一个对象的长度使他含有元素的数量。可以用length( )函数来获取。
5.·c( )函数和相应的参数:用来创建一个向量。
6.mode( ) 显示数据类型
7.NA 缺失值
8.通过方括号之间的索引,可以访问一个向量的某个特定元素。v[1 ]
通过使用相同的索引策略,可以改变一个特定向量元素的值。v[1]<-”hello”
9.vector( ) 空向量
10.sqrt() 函数计算其参数的算术平方根
④向量化
R语言最强大的方面之一就是函数的向量化。这些函数可以直接对向量的每个元素进行操作。
v<-c(4, 7, 23.5, 76.2, 80)
x<-sqrt(v)
x
[1] 2.000000 2.645751 4.847680 8.729261 8.944272
批注:
利用R进行向量的算术运算如相加时,如果两个向量的长度不同,向量应该如何运算呢?R将使用循环规则,该规则重复较短的向量元素,直到得到的向量长度与较长向量的长度相同。
v1<-c(4,6,8,24)
v2<-c(10,2)
v1+v2
[1] 14 8 18 26
它是把向量c扩充为c(10,2,10,2)。如果较长向量的长度不是较短向量的整数倍,则R给出警告:
v1<-c(4,6,8,24)
v2<-c(10,2,3)
v1+v2
[1]14 8 11 34
Warning message:
In v1+v2: longer object length is not a multiple of shorter object length.(长的对象长度不是短的对象长度的整数倍。)
循环规则已经应用,运算也完成了。(这里只是给出一个警告,而不是错误。)
如前所述,单个数字在R中表示长度为1的向量。这种表示在下面的运算中非常方便:
1<-c(4,6,8,24)
2*v1
[1] 8 12 16 48
注意,数字2(实际上是向量c(2)!)被循环,导致v1的所有元素乘以2。正如我们将看到的,这种循环也适用于其他的对象,如数组和矩阵。
好啦,今天(2015/4/2)R对象先学这么多。
还有一个问题:
x<-945
x
[1] 945
y<-39
y
[1] 39
y<-43
y
[1] 43
z<-5
w<-z^2
z
[1] 5
z<-5
w<z^2
[1] FALSE
z<-5
w<-z^2
w
[1] 25
i<-(z*2+45)/2
i
[1] 27.5
(34+90)/12.5
[1] 9.92
ls()
[1] "a" "A" "i" "w" "x" "y" "z"
rm(i,w,y,z)
ls
function (name, pos = -1L, envir = as.environment(pos), all.names = FALSE,
pattern)
{
if (!missing(name)) {
nameValue <- try(name, silent = TRUE)
if (identical(class(nameValue), "try-error")) {
name <- substitute(name)
if (!is.character(name))
name <- deparse(name)
warning(gettextf("%s converted to character string",
sQuote(name)), domain = NA)
pos <- name
}
else pos <- nameValue
}
all.names <- .Internal(ls(envir, all.names))
if (!missing(pattern)) {
if ((ll <- length(grep("[", pattern, fixed = TRUE))) &&
ll != length(grep("]", pattern, fixed = TRUE))) {
if (pattern == "[") {
pattern <- "\ ["
warning("replaced regular expression pattern '[' by '\ \ ['")
}
else if (length(grep("[^\ \ ]\ [<-", pattern))) {
pattern <- sub("\ [<-", "\ \ \ [<-", pattern)
warning("replaced '[<-' by '\ \ [<-' in regular expression pattern")
}
}
grep(pattern, all.names, value = TRUE)
}
else all.names
}
<bytecode: 0x000000000e5c4ef8>
<environment: namespace:base>
问题是:
高亮部分打“>ls()”和“>ls”,
少打一个括号,为什么差别这么大呢?
这个括号是什么作用?
希望各位大大能加以指点。
不过我会在下周三晚上问老师再回来更新的。⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄
谢谢阅读(✿◡‿◡).
2015/4/2
