Advertisement

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

全部评论 (0)

还没有任何评论哟~