R简单记录

c()

 x <- c(10.4, 5.6, 3.1, 6.4, 21.7)

这是一个用函数 c() 完成的赋值语句。这里的函数 c() 可以有任意多个参数,而它返回的值则是一个把这些参数首尾相连形成的向量

assign()

assign("x", c(10.4, 5.6, 3.1, 6.4, 21.7))
1/x
五个数的倒数就会在终端显示(注意,x 的值没有改变)
 y <- c(x, 0, x)
会创建一个含有11个元素的向量y,其中包括两份x 拷贝和位于中间的一个0
 v <- 2*x + y + 1
将产生一个新的长度为11的向量v。它由2*x 重复2.2次,y 重复一次,1 重复11次得到
的向量相加而成。

基本的算术运算符就是常用的+,-,*,/ 和做幂运算用的^。 另外还包括常
用的数学函数,如log,exp,sin,cos,tan,sqrt 等等。这些在教科书上都有所定义。 max 和min 分别给出一个向量的最大值和最小值。 函数range 得到的是一个长度为2的向量,即c(min(x), max(x))。 length(x) 给出向量x 的元素个数, sum(x)给出x 中元素的累加和, 而prod(x) 则得到它们的乘积。两个统计函数就是计算均值的mean(x) (等价于sum(x)/length(x)) 和计算样
本方差的var(x)
sort(x) 返回一个和x 长度一样但元素以升序排列的向量;此外,还有其他功能更强大的排序函数(如可以随意排列的order() 和sort.list()等)。
注意max 和min 将会给出它们参数向量中的最大和最小值。在同时给予多个参数向量的情况下,这两个函数会把参数向量合并成一个向量处理。并行(parallel)求解最大和最小值的函数pmax 和pmin 将会返回一个和最长的参数长度一致的向量。该向量每一个元素就是同一位置上的所有输入向量(即函数的参数)元素的最大(最小)

> sqrt(-17)
将会给出NaN 和一个警告,但是
> sqrt(-17+0i)
就会以复数形式计算。

seq()

是数列生成中最为常用的工具。它有五个参数,仅部分参数需要每次
都设定。起始的两个参数,表示一个数列的首尾。如果只是给定这两个值,则和冒号运算符的效果完全一样了。如seq(2,10) 等价于2:10。

rep()

它可以用各种复杂的方式重复一个对象。

> s5 <- rep(x, times=5)
这种方式先把x 的完整拷贝五次,保持x 的数列顺序,逐一放在s5 中。另一种有用的
方式是
> s6 <- rep(x, each=5)
这种方式把x 中的每个元素都重复五次,然后将重复五次的元素逐一放入。

和数值向量一样, R 允许操作逻辑向量。逻辑向量元素可以被赋予的值
有TRUE,FALSE 和NA (“不可得到”, 见下一小节)。前两个值可以分别简写为T 和F。注意T 和F 仅仅默认设置为TRUE 和FALSE 的等价变量,不是系统保留字(reservedword),因此可以被用户重写。正因为这样,你应该尽量使用属于系统保留字的TRUE和FALSE。逻辑向量可以由条件式(conditions)产生。例如

 temp <- x > 13

is.na(x)

返回一个和x 同等长度的向量。它的某个元素值为TRUE 当且仅当x中对应元素是NA。
对于NA 和NaN 用is.na(xx) 检验都是 TRUE。为了区分它们,is.nan(xx)
就只对是NaN 元素显示TRUE。

paste()

可以有任意多的参数,并且把它们一个接一个连成字符串。这些参数中的任何数字都将被显式地强制转换成字符串,而且以同样的方式在终端显示。默
认的分隔符是单个的空格符,不过这可以被指定的参数修改。参数sep=string 就是将分隔符换成string,这个参数可以设为空。

 labs <- paste(c("X","Y"), 1:10, sep="")
使得labs 变成一个字符向量。
c("X1", "Y2", "X3", "Y4", "X5", "Y6", "X7", "Y8", "X9", "Y10")
负整数向量。这种索引向量指定被排除的元素而不是包括进来8。因此
> y <- x[-(1:5)]
 将x 除开始五个元素外的其他元素都赋给y。
> fruit <- c(5, 10, 1, 20)
> names(fruit) <- c("orange", "banana", "apple", "peach")
> lunch <- fruit[c("apple","orange")]

mode(object) 和length(object)

可用于任何数据对象以得到其模式和长度。

attributes(object)

一个对象更详细的特征常常通过attributes(object) 得到,具体参见返回和设定对象属性<页码:18>. 正因为这样,模式和长度又叫做一个对象的“内在属性”。函数attributes(object) 给出对象当前定义的非内在属性(non-intrinsic at-tributes)的列表。函数attr(object, name) 可以用来选择特定的属性。这些函数很少用到 6 ,只是在一些非常特殊的情况下,如为特定目的设计一些新属性时才使用。但是,这个概念是非常重要的。对属性进行赋值和删除操作必须特别小心,因为它们是 R 对象系统的不可分割的一部分。当它位于一个赋值操作的左边是,它既可用于关联object 的新属性也可用于改变一个已经存在的属性。例如, 下面的命令

> attr(z, "dim") <- c(10,10)
允许 R 把z 当作一个10×10 的矩阵。

as.something()

这些函数主要用于对象模式数据的强制转换,或者赋予某个对象一些先前没有的功能。

我们可以进行如下转换
> digits <- as.character(z)
这样,digits 就是一个字符向量c("0", "1", "2", ..., "9")。我们可以再一次强
制转换,或者说模式改变,以重建数值向量:
> d <- as.integer(digits)```

因子(factor)是一个对等长的其他向量元素进行分类(分组)的向量对象。 R同时提供有序(ordered)和无序(unordered)因子。而“真正”使用因子是在模型设计公式的时候

factor()

创建因子

tapply()

将一个功能函数(这里是mean())用于第二个参数 3 (这里是statef)定义于第一个参数(这里是incomes)上得到的所有组。此时,各个组的数据好像是独立的向量。得到的结果向量长度和因子的水平数一致。

 state <- c("tas", "sa", "qld", "nsw", "nsw", "nt", "wa", "wa",
"qld", "vic", "nsw", "vic", "qld", "qld", "sa", "tas",
"sa", "nt", "wa", "vic", "qld", "nsw", "nsw", "wa",
"sa", "act", "nsw", "vic", "vic", "act")
> statef <- factor(state)
函数print() 处理因子和其他对象有点不同:
> statef
[1] tas sa qld nsw nsw nt wa wa qld vic nsw vic qld qld sa
[16] tas sa nt wa vic qld nsw nsw wa sa act nsw vic vic act
Levels: act nsw nt qld sa tas vic wa
函数levels() 可以用来得到因子的水平(levels)。
> levels(statef)
[1] "act" "nsw" "nt" "qld" "sa" "tas" "vic" "wa"

 incomes <- c(60, 49, 40, 61, 64, 60, 59, 54, 62, 69, 70, 42, 56,
61, 61, 61, 58, 51, 48, 65, 49, 49, 41, 48, 52, 46,
59, 46, 58, 43)
为计算样本中每个州的平均收入,我们可以用函数tapply()> incmeans <- tapply(incomes, statef, mean)
这将给出一个均值向量。各个元素都用对应的水平名字标记。
act nsw nt qld sa tas vic wa
44.500 57.333 55.500 53.600 55.000 60.500 56.000 52.250
向量只有在定义了 dim 属性后才能作为数组在R 中使用。假定,z是一个含1500
个元素的向量。那么
> dim(z) <- c(3,5,100)
对dim 属性的赋值使得该向量成一个3 ×5 ×100 的数组。

数据向量(data vector)的值在数组中的排列顺序采用 FORTRAN 方式的数组元素次序,即“按列次序”,也就是说第一下标变化最快,最后下标变化最慢。假定数组a的维数向量是c(3,4,2),则a 中有3×4×2 = 24 元素,依次为a[1,1,1],a[2,1,1], …, a[2,4,2], a[3,4,2]。
数组元素可以通过给定数组名及其后方括号中用逗号隔开的下标访问。更为一般的是,数组分割可以通过在下标位置给定一系列索引向量实现;需要注意的是,如果某个位置上给定的索引向量为空,则该下标处所有可能值都会被取到。
和用于下标位置的索引向量一样,可以根据索引数组去给数组中不规则的元素集合赋值或者将数组中特定的元素返回到一个向量中。

> x <- array(1:20, dim=c(4,5)) # 产生一个 4 × 5 的数组。
> x
[,1] [,2] [,3] [,4] [,5]
[1,] 1 5 9 13 17
[2,] 2 6 10 14 18
[3,] 3 7 11 15 19
[4,] 4 8 12 16 20
> i <- array(c(1:3,3:1), dim=c(3,2))
> i # i 是一个 3 × 2 的索引矩阵。
[,1] [,2]
[1,] 1 3
[2,] 2 2
[3,] 3 1
> x[i] # 提取这些元素。
[1] 9 6 3
> x[i] <- 0 # 用0替换这些元素。
> x
[,1] [,2] [,3] [,4] [,5]
[1,] 1 5 0 13 17
[2,] 2 0 10 14 18
[3,] 0 7 11 15 19
[4,] 4 8 12 16 20

array() 函数

除了用设定一个向量dim 属性的方法来构建数组,它还可直接通过函数array 将向量转换得到,具体格式为

> Z <- array(data vector, dim vector)
假定向量h 有24个或更少的数值,那么命令
> Z <- array(h, dim=c(3,4,2))
就会利用h 在Z 中创建一个3 ×4 ×2 的数组。如果h 的长度正好是24,那么就和下面
的命令等价
> dim(Z) <- c(3,4,2)
如果h 的长度小于24,它的元素将会被循环使用直到长度为24

此时,dim(Z) 表示维度向量c(3,4,2),Z[1:24] 表示数据向量(就像在向量 h中一样)。空下标的Z[] 和没有下标的Z 都表示整个数组。

• 表达式运算是从左到右进行的;
• 短的向量操作数将会被循环使用以达到其他操作数的长度;
• 有且只有短的向量和数组在一起,数组必须有一样的属性dim,否则返回一个错
误 1 ;
• 向量操作数比矩阵或者数组操作数长时会引起错误;
• 如果数组结构给定,同时也没有关于向量的错误信息和强制转换操作,结果将
是一个和它的数组操作数属性dim 一致的数组

外积
> a<-1:5
> a
[1] 1 2 3 4 5
> b<-1:5*2
> b
[1]  2  4  6  8 10
> ab<-a%o%b
>  ab<-outer(a,b,'*')
> ab
     [,1] [,2] [,3] [,4] [,5]
[1,]    2    4    6    8   10
[2,]    4    8   12   16   20
[3,]    6   12   18   24   30
[4,]    8   16   24   32   40
[5,]   10   20   30   40   50

研究函数f(x;y) = cos(y)/(1 + x 2 ) 在 R 在向量x 和y形成的格子平面(regular grid)上的特征,可以按下面的步骤进行:

> f <- function(x, y) cos(y)/(1 + x^2)
> z <- outer(x, y, f)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值