R语言学习之基础知识一

原文地址为: R语言学习之基础知识一

1. R对象

        对象是R语言两个主要概念之一,另一个是函数。

       R对象可以看作是具有关联名称的存储空间。R中的一切都存储在对象中。所有的变量、数据、函数都以命名对象的形式存储在计算机的内存中。

       函数是R语言中一种特殊形式的对象,用来完成某个操作。函数可以接受一些输入参数,通过执行一系列操作产生结果。R已提供大量可用函数,用户也可以创建新的函数。

       R语言中对象赋值运算符:<-,也可以是=,但为防止与相等测试混淆,不推荐用=。如给对象x赋值,R命令行直接命令:

>x <-945

这样,就把数值945存储在名为x的对象中。只要在R命令行中输入对象的名词,就能看到它的内容,如输入:

>x

[1] 945

        数值前的“[1]”可以读作“此行是从对象的第一个元素开始显示的值”。这种形式看起来很眼熟,就是C、JAVA等语言的数组形式。确实R语言中的对象可以表示向量,内含多个值,用此种表示方式非常有用。

        R语言的赋值操作也是“破坏性”的,即一个对象只能有一个给定的内容。如果将新的内容分配给当前对象,则该对象先前的内容会被覆盖。举例如下:

> y <-39

>y

[1] 39

> y <-67

>y

[1] 67

        R语言赋值操作支持数值表达式,此种情况下,对象存储表达式的计算结果:

> z <- 5

> w <-z^2

>w

[1] 25

>i<- (z* 2 + 45) / 2

>i

[1] 27.5

        综合上述赋值运算,R语言赋值运算符都先计算右侧,然后把结果存储到左侧的对象中。

        如果只想知道某些算数运算的结果,那么不需要把表达式的结果赋给对象,即可将R环境当作计算器。本人在Ubuntu下经常这么做,非常方便快捷。

> 34 + 90 /9

[1] 44

        R可以将十六进制数转化为十进制数。

> 0xf

[1] 15

> 0xff

[1] 255

> 0xffff

[1] 65535

        值得注意的是:创建的每个对象都存储在计算机内存中,直到删除它。可通过命令ls()或objects()列举出当前内存中的对象。

>ls()

[1]"i" "w" "x" "y" "z"

>objects()

[1]"i" "w" "x" "y" "z"

        通过rm命令删除对象,可以一次删除一个,也可以一次删除多个。

>rm(y)

>rm(x,z)

>ls()

[1]"i" "w"

删除一个不存在的对象,系统会发出警告信息。

>rm(y)

Warningmessage:

In rm(y) :object 'y' not found

        R语言的对象名称可以包含任何大、小写字母、数字0~9(不能用于开头)以及字母相似的符号“.”。注意:R中的名称是区分大小写的,这也是导致很多初学者遇到“找不到对象”错误的一个常见原因。

2. 向量

        R中最基本的对象,有模式和长度两种属性。模式指的是存储类型,长度是包含的元素数量。R的基本数据类型有:字符型、逻辑型、数值型、复数型。注意:R的字符型事实上是一组字符,而非单个字符,类似其它语言的字符串类型。逻辑值只能是T(TRUE)和F(FALSE),True或False等不是有效的逻辑值,因为R中的名称是大小写敏感的。

        即使将单一数字赋值给对象,也会创建一个包含单个元素的向量,这个从前面的示例中就可以看出。

        R中使用c()函数和相应的参数来创建向量,length()查看元素数量,mode()查看数据类型。

> v <-c(4, 7, 23.5, 76.2, 80)

>v

[1]  4.0 7.0 23.5 76.2 80.0

>length(v)

[1] 5

>mode(v)

[1]"numeric"

        一个向量所有元素必须属于相同的模式,如果不是,会进行强制类型转换。

> v <-c(4, 7, 23.5, 76.2, 80, "rrt")

> v

[1]"4"    "7"    "23.5" "76.2""80"   "rrt"

        所有向量可以包含缺失值NA。

> u <-c(4, 6, NA, 2)

>u

[1]  4  6NA  2

> k <-c(T, F, NA, TRUE)

> k

[1]  TRUE FALSE   NA  TRUE

        可通过方括号索引访问向量中某个特定元素,也可以通过该方式改变某个特定元素值。

> v[2]

[1]"7"

> v[1]

[1]"4"

> v[1]<- "hello"

> v

[1]"hello" "7"    "23.5" "76.2" "80"    "rrt"

        R允许创建空向量,且在不存在的索引处添加向量元素,可以改变向量长度。

> x <-vector()

>length(x)

[1] 0

>x[3] <-45

>length(x)

[1] 3

> x

[1] NA NA 45

注意:向量未知值的使用,虽然灵活,但却是有代价的:在R中使用一个不存在的向量位置,不会报错。如下示例:

>length(x)

[1] 3

> x[10]

[1] NA

> x[5]<- 4

> x

[1] NA NA 45NA  4

        利用赋值运算的破坏性,可以缩短向量大小。

> v <-c(45, 243 , 78, 365, 5656, 334, 90, 23, 809)

> v

[1]   45 243   78  365 5656 334   90   23 809

> v <-c(v[5], v[7])

> v

[1] 5656   90

3. 向量化

        R语言最强大功能之一是函数的向量化,即函数直接对向量的每个元素进行操作。如:

> v <-c(4, 7, 23.5, 76.2, 80)

> x <-sqrt(v)

> x

[1] 2.0000002.645751 4.847680 8.729261 8.944272

向量化函数输出一个与输入向量相同长度的结果向量。

        R语言支持向量的算术运算:

> v1 <-c(4, 6, 87)

> v2 <-c(34, 32.4, 12)

> v1 + v2

[1] 38.0 38.499.0

        如果两个向量的长度不同,则使用循环规则该规则重复较短的元素,直到得到的长度与较长向量的长度相同,如:

> v1 <-c(4, 6, 8, 24)

> v2 <-c(10, 2)

> v1 + v2

[1] 14  8 18 26

如果较长向量的长度不是较短向量长度的整数倍,则R给出警告:

> v1 <-c(4, 6, 8, 24)

> v2 <-c(10, 2, 4)

> v1 + v2

[1] 14  8 12 34

Warningmessage:

In v1 + v2 : 长的对象长度不是短的对象长度的整倍数

        单个数字在R中表示为长度为1的向量,如:

> v1 <-c(4, 6, 8, 24)

> 2 * v1

[1]  8 12 16 48

数字2实际上是c(2)被循环,使得v1的所有元素都乘以2。

注意:循环规则同样适用于数组和矩阵。


转载请注明本文地址: R语言学习之基础知识一

猜你喜欢

转载自blog.csdn.net/wcqlwyt/article/details/80957929