数值、运算、赋值和向量

最简单的功能

简单运算

一次性地处理多个数值

+

-

*

/

^

()

sqrt

(-2)

log(x=243,base=3)

exp(x=3)

2.134566666e+12

2.5333e-07

计算中自动省略的信息,仍然保留

无穷大或零

<-

=

覆盖

多个任务执行相同运算或者进行多次比较,例如调整一个数据集的测量方法时

处理多维问题的基本模块

关于单变量的测量值或观测值的集合,例如100个人每天喝茶的数量

c(1,41,3,77)

向量分类

序列、重复、排序和长度

等差递增或递减的向量

seq(from=3,to=27,by=3)

seq(from=3,to=27,length.out=40)

rep(x=1,times=4)

rep(x<-c(4,6,8,9),each=2),not"c=(4,6,8,9)"

rep(x<-c(7,6,5,4,3),times=3,each=2)执行顺序

each、times均未知的情形

x12<-(rep(x<-c(7,6,5,4,3),times=3,each=2))

rep<-(x12,each=9)

sort(X<-C(5,9,78,-88,99,7,35),decreasing=FALSE)

sort(X<-C(5,9,78,-88,99,7,35),decreasing=TRUE)

length(x=c(3,9,88,74))

length(5:88)

索引,子集

v5(11),v5[11]

1:v5

1:length(v5)

v6<-v5[-6]

算术运算的结果,可以替代很多数字存在的情况

中括号

v7<-v5[-2+1]

 v8<-v5[-length(v5)]
v9<-v5[c(1,4,7)]
v10<-v5[1:4]

v10<-v5[4:2]

在一个索引向量中不能混合使用正负指标

v10[1]<-77

> vv5<-vv4[1,length(vv4)]
Error in vv4[1, length(vv4)] : 量度数目不对
> vv5<-c(vv4[1,length(vv4)])
Error in vv4[1, length(vv4)] : 量度数目不对
> vv5<-c(vv4[1],vv4[length(vv4)])
> vv5
[1] 3.000000 2.166667

> seq(vv7)
 [1]  1  2  3  4  5  6  7  8  9 10 11 12
> sort(vv8<-vv7,decreasing=FALSE)
 [1] -33.000000 -33.000000  -5.100000  -5.100000   2.000000   2.000000
 [7]   2.166667   3.000000   3.750000   4.500000   5.250000   6.000000
> vv8<-sort(vv8<-vv7,decreasing=FALSE)
> vv8
 [1] -33.000000 -33.000000  -5.100000  -5.100000   2.000000   2.000000
 [7]   2.166667   3.000000   3.750000   4.500000   5.250000   6.000000
> vv9<-c(vv8[14:1])
> vv9
 [1]         NA         NA   6.000000   5.250000   4.500000   3.750000
 [7]   3.000000   2.166667   2.000000   2.000000  -5.100000  -5.100000
[13] -33.000000 -33.000000
> vv9
 [1]         NA         NA   6.000000   5.250000   4.500000   3.750000
 [7]   3.000000   2.166667   2.000000   2.000000  -5.100000  -5.100000
[13] -33.000000 -33.000000
> vv9<-vv9
> vv9
 [1]         NA         NA   6.000000   5.250000   4.500000   3.750000
 [7]   3.000000   2.166667   2.000000   2.000000  -5.100000  -5.100000
[13] -33.000000 -33.000000
> vv9[-1]
 [1]         NA   6.000000   5.250000   4.500000   3.750000   3.000000
 [7]   2.166667   2.000000   2.000000  -5.100000  -5.100000 -33.000000
[13] -33.000000
> vv9[-1]
 [1]         NA   6.000000   5.250000   4.500000   3.750000   3.000000
 [7]   2.166667   2.000000   2.000000  -5.100000  -5.100000 -33.000000
[13] -33.000000
> vv9<-vv9[-1]
> vv9
 [1]         NA   6.000000   5.250000   4.500000   3.750000   3.000000
 [7]   2.166667   2.000000   2.000000  -5.100000  -5.100000 -33.000000
[13] -33.000000
> vv9<-vv9[-1]
> vv9
 [1]   6.000000   5.250000   4.500000   3.750000   3.000000   2.166667
 [7]   2.000000   2.000000  -5.100000  -5.100000 -33.000000 -33.000000
> vv8[14:1]
 [1]         NA         NA   6.000000   5.250000   4.500000   3.750000
 [7]   3.000000   2.166667   2.000000   2.000000  -5.100000  -5.100000
[13] -33.000000 -33.000000
> vv8[12:1]
 [1]   6.000000   5.250000   4.500000   3.750000   3.000000   2.166667
 [7]   2.000000   2.000000  -5.100000  -5.100000 -33.000000 -33.000000
> vv9<-c(vv8[length(vv8):1)
错误: 意外的')' in "vv9<-c(vv8[length(vv8):1)"
> vv9<-c(vv8[length(vv8):1])
> vv9
 [1]   6.000000   5.250000   4.500000   3.750000   3.000000   2.166667
 [7]   2.000000   2.000000  -5.100000  -5.100000 -33.000000 -33.000000
> vv10<-c(vv8[length(vv8):1])
> vv10
 [1]   6.000000   5.250000   4.500000   3.750000   3.000000   2.166667
 [7]   2.000000   2.000000  -5.100000  -5.100000 -33.000000 -33.000000

不是14个数值,而是12个。

如何一次性删除两个值?

> vv14<-vv12[-c(1,length(vv12)]
错误: 意外的']' in "vv14<-vv12[-c(1,length(vv12)]"
> vv14<-vv12[c(-1,-length(vv12))]
> vv14
[1]  4.50  5.25  6.00 98.00 97.00 96.00  2.00 -5.10
> vv14<-vv12[-c(1,length(vv12))]
> vv14
[1]  4.50  5.25  6.00 98.00 97.00 96.00  2.00 -5.10
> vv15<-vv14[-c(1,length(vv14))]
> vv15
[1]  5.25  6.00 98.00 97.00 96.00  2.00
以上便是对如何一次性删除两个及以上数值的回答。

同样的道理,一次性也可以替换两个及以上的数值,例如vv15[c(1,2)]<-c(78,99)

> vv15[c(1,2)]<-c(78,99)
> vv15
[1] 78 99 98 97 96  2

注意,如下

> vv14[c(1,3,5,7)]<-c(99,-99)
> vv14
[1]  99.00   5.25 -99.00  98.00  99.00  96.00 -99.00  -5.10
这种情况下,长度为2的向量改写了4个特定元素,这是我们所熟悉的循环方法。此种情况下向量长度必须可以均匀划分被改写元素的数量,否则会出现警告(但并不会报错)。

R软件中,向量非常有用是因为一次性处理多个元素是的速度快且效率高。这种面向向量、向量化或者针对元素的操作是R语言的一个关键特征。

vv12
 [1] 99.00  4.50  5.25  6.00 98.00 97.00 96.00  2.00 -5.10 95.00
> vv12-2
 [1] 97.00  2.50  3.25  4.00 96.00 95.00 94.00  0.00 -7.10 93.00
 

使用不同长度的向量

bar<-c(1,-1)

vv12*bar

警告与报错的不同

可以使用单值向量,来对任意长度向量中的所有值进行重复操作 ,例如,希望用常数来调整或转换一系列测量指标。

面向向量的操作

> sum(vv12)
[1] 497.65
> prod(vv12)
[1] -1.240941e+13

向量函数,比迭代运行(如循环)更快且效率更高。

大多数R函数用于特定的数据结构,以确保代码的整洁以及性能优化。

向量元素的个数

> vvv1<-rep(c(2,0.5,1),times=3)
> vv1
[1] 3.00 3.75 4.50 5.25 6.00
> vvv1
[1] 2.0 0.5 1.0 2.0 0.5 1.0 2.0 0.5 1.0
> vvv2<-vvv1+c(-2,1.5,-1)
> vvv2
[1] 0 2 0 0 2 0 0 2 0
> length(vvv2)
[1] 9
> vvv2<-vvv1*c(0,0,0)
> vvv2
[1] 0 0 0 0 0 0 0 0 0
> length(vvv2)
[1] 9
> vvv2<-vvv1/c(2,0.5,1)
> vvv2
[1] 1 1 1 1 1 1 1 1 1
> length(vvv2)
[1] 9

> vvv8[c((length(vvv8)/2+1):length(vvv8))]*vvv6[2]
[1]  4  8 12
> vvv8[c(length(vvv8)/2+1:length(vvv8))]*vvv6[2]
[1]  4  8 12 NA NA NA

foo <- rep(x=c(2,4,6),times=2)*rep(x=c(1,2),each=3)
最优解法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值