R语言——科学计算

参考资料:学习R

1、数学运算符和向量

        运算符+执行加法,除了把两个数字相加之外,还可以把两个向量相加。向量是数值的有序集,在统计学中极其重要,因为通常的分析对象是整个数据集,而不是一条数据。

        冒号运算符 : 能创建一个从某个数值开始到另一个数值结束的序列。而c函数则会把一系列的值拼接起来创建向量(这里c是concatenate的第一个字母,意思是“把所有东西连接在一起”)。

        R中的变量名是区分大小写的,大写的C函数与小写的c函数作用完全不同。

        在R中,向量化有几种含义,其中最常见的含义是:运算符或函数能作用于向量中的每个元素,而无需显式地编写循环语句(这种内置的基于元素的隐式循环也远远快于显式地写循环语句)。向量化的第二个含义是:当一个函数把一个向量作为输入时,能计算汇总统计:

        向量化的第三种含义不太常见,即参数的向量化,例如当函数根据输入参数计算汇总统计时。

        在R中,不只是加号(+),其他所有算术运算符都是向量化的。如下:

# 求和
sum(1:5)
# 求中位数
median(1:5)

# 减法
c(2,3,5,7,11,13)-2
# 乘法
-2:2*-2:2
# 求幂用^或**
identical(2^3,2**3)
# 浮点数除法
1:10/3
# 整除
1:10 %/% 3
# 取余
1:10 %% 3

        R包含了多种数学函数。有三角函数(sin、cos、tan,以及相反的asin、acos和atan)、对数和指数(log和exp)。

        要比较整数值是否相同需要用==而不是=。要检验是否不想等,运算符为!=。大于和小于号就是>和<。大于等于就是>=,小于等于就是<=。

        使用 == 来比较非整型变量可能会带来问题。 到目前为止。 我们处理的所有数字都是浮点数。 这意味着, 对于两个数 a 和 b 来说, 它们可存储为 a * 2 ^ b。 由于它们都以 32 位存储, 所以只能是一个近似值。 这意味着舍入误差(rounding error) 会常常潜伏在你的计算之中, 你预期的答案可能是完全错误的。如下:

        R还提供了all.equal函数用于检查数字是否相等。它提供了一个容忍度(tolerance level,默认情况下是1.5e-8),因而那些小于此容忍度的舍入误差将被忽略。

要检查两个数字是否一样,尽量不要使用==,而使用all.equal()函数。

        我们也可以使用==来比较字符串。在这种情况下,比较会区分大小写,所以字符串必须完全匹配。

2、变量赋值

        在给变量赋值之前,并不需要声明它们,R中没有声明这个概念。

        变量名可包含字母、数字、点和下划线,但它不能以数字或一个点后跟数字(因为看起来太像一个数字)开头。系统的保留字也不是允许的,如if和for。

        赋值运算符两边的空格并不是必须的,但它们有助于提高代码的可读性。尤其是对于<-来说,两边的空格可以轻松将它与小于号区分开。

        我们还可以使用<<-来对全局变量赋值。只需把它看做创建了一个可在任意地方使用的变量。

        注意,当我们对一个变量赋值时,不会马上看到值时多少。要看到变量包含的值,只需在命令提示符下键入其名称即可将其打印出来。

        如果我们想把赋值和打印语句都写在同一行,有两种选择。第一,把多个语句放在一行,中间用 ; 分开。第二,把赋值语句写在括号()中。如下:

3、特殊数字

        为了帮助算术运算,R支持4中特殊值:Inf,-Inf,NaN和NA。前两个是正负无穷。NaN为(not-a-number)的缩写,它意味着我们的计算或没有数学意义,或无法正确执行。NA是(not available)的缩写,并代表着缺失值。

4、逻辑向量

        当我们启动R时,变量T和F已被系统默认定义为TRUE和FALSE。虽然这样能少打点字,但也造成很大的问题。T和F不是系统的保留字,因此用于可以重新定义它们。

        R中有3个向量化逻辑运算符

        !代表非操作

        &代表与操作

        |代表或操作

        我们可编出一些真值表来看看它们是如何工作的(请不用管这段代码是否有意义, 只需集中精力去理解每个值是如何在真值表中计算出来的) :
 

# 三个逻辑值
x<-c(TRUE,FALSE,NA)
# 取得x和y的所有组合
xy<-expand.grid(x=x,y=x)
# 在xy内进行赋值
within(
  xy,
  {
    and<-x&y
    or<-x|y
    not.y<-!y
    not.x<-!x
  }
)

        其他两个比较有用的处理逻辑向量的函数是any和all,输入向量中至少包含一个TRUE值或只包含TRUE值,他们将分别返回为TRUE。

none_true<-c(FALSE,FALSE,FALSE)
some_true<-c(FALSE,TRUE,FALSE)
all_true<-c(TRUE,TRUE,TRUE)
any(none_true)
any(some_true)
any(all_true)
all(none_true)
all(some_true)
all(all_true)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值