《R语言初学指南》一1.2 向量

    xiaoxiao2024-07-07  107

    本节书摘来自异步社区《R语言初学指南》一书中的第1章,第1.2节,作者【美】Brian Dennis(布莱恩·丹尼斯),更多章节内容可以访问云栖社区“异步社区”公众号查看

    1.2 向量

    R语言初学指南R可以处理“一整串”的数字。例如:

    > x=c(3,−2,4,7,5,−1,0) > y=4 > x+y [1] 7 2 8 11 9 3 4

    上面第一行中的命令c()用来将3,−2,4,7,5,−1和0“合并”成一个列表,将该列表命名为x。在R中,由数字组成的列表有一个专门术语:向量。在这里,x是一个由7个元素组成的向量,y的值是4。表达式x+y的意思是把x中的每一个元素都加4。不过,如果y和x一样,都是向量,那么会出现什么情况呢?

    > y=c(1,2,3,4,5,6,7) > z=x+y > z [1] 4 0 7 11 10 5 7

    这里x+y代表,x的元素与y中对应的元素分别相加!

    回忆一下四年级时,老师曾给出一些大数字相乘的题目作为家庭作业:

    把上面一排数字和下面一排数字各自看成一个向量,分别命名为“top”和“bot”。然后,把两个向量相乘:

    > top=c(75634,2339,103458,48761,628003) > bot=c(567,138,974,856,402) > top*bot [1] 42884478  322782  100768092  41739416  252457206

    这里有几个地方需要注意:(1)在写R语句时,不要用逗号把比较大的数按照三位一组的方式隔开。逗号在R中有其他的用处,比如,在命令c()中,需用逗号把不同的数分开;(2)要按照同样的顺序,把两组数分别输入到两个向量中;(3)数之间可有空格,但必须要用逗号把数隔开;(4)不要把这个告诉四年级的小朋友。

    在R中,所有的算术运算都可以用在向量上,比如,加减运算、乘除运算,甚至包括乘方运算。像刚才看到的那样,如果对一个数和一个向量进行运算,那么这个数会作用在向量的每个元素上;如果对两个长度相同的向量进行运算,则两个向量中对应的元素会分别进行运算。

    向量运算的优先级与算术运算一样,并且也可用括号来确定哪些运算需要优先进行:

    > ted=c(1,2,3) > kat=c(−1,1,.5) > 2*(ted+kat) [1] 0 6 7 > 2*ted+kat [1] 1 5 6.5

    如果在输入指令时出现错误,只要再重新输入一遍正确的指令即可。R会计算并保存最终输入的版本。同时,如果一行指令太长,可在任意一个明显不完整的R命令(R是很智能的!)处敲击回车键,这时,R会出现一个像加号一样的提示符,在这个提示符处继续输入命令,输入完后敲击回车键就可以了:

    > kat=c(−1,1, + .5) > kat [1] −1.0 1.0 0.5

    可用下面的冒号“:”来建立一个特殊的向量:

    > j=0:10 > j [1] 0 1 2 3 4 5 6 7 8 9 10

    这里的j是向量,其元素是0~10的整数。也可用同样的方式来定义包含负数的向量:

    > k=5:−5 > k [1] 5 4 3 2 1 0 −1 −2 −3 −4 −5

    想知道2的0次方到20次方分别是多少吗?这样做:

    > j=0:20 > 2^j [1]  1    2    4     8    16    32   64    128 [9]  256   512   1024   2048   4096  8192  16384  32768 [17] 65536  131072 262144  524288  1048576

    此时读者可能已经注意到:用R的语法可以非常清晰地描述数学问题,这样就可毫无障碍地用即时消息或是短信来跟其他人讨论数学问题。

    R:嗨,忙什么呢?

    S:做数学作业呢,唉。

    R:是啊,好愁人啊,我忘了求二次方程的方法了。

    S:是这样的。

    S:ax^2+bx+c=0。

    S:当 b^2-4ac>0 时,存在两个解。

    S:(-b+sqrt(b^2-4ac))/(2*a);

    S:(-b-sqrt(b^2-4ac))/(2*a)。

    R:谢谢啦!你在用R做作业吗?

    S:当然啦!若用计算器需多花一倍的时间啊。

    R:那等你做完了,一起去咖啡店吧。

    S:好的!马上就做完了,用R就是方便。

    S和R这两个人都是有经验的R使用者,他们知道sqrt()是用来求解括号中的平方根。在第3章中,还会介绍该函数和其他一些函数的使用方法。

    相关资源:Java SE 6.0编程指南 源码
    最新回复(0)