r入门练习(三)
来源:互联网 发布:sql insert 语法 编辑:程序博客网 时间:2024/05/22 11:38
R语言学习,后更答案。
第七章 字串符和因子
7.1 字符串
字符向量中的每个元素都是字符串,文本的基本单位是字符向量。字符向量可用c 函数创建。我们可以用单引号或双引号把字符串引用起来,只要引号之间匹配即可paste函数能将不同字符串组合在起来,参数sep可以更改分隔符,paste0函数可去掉分隔符。collapse 参数可把结果收缩成一个包含所有元素的字符串:
paste( c( "red","yellow") , "lorry", sep = "- ")
past e( c( "red","yellow") , "lorry", collapse = ", ")
past e0( c( "red","yellow") , "lorry")
toString函数是paste的变种,可限制打印的数量。例如width = 40将输出限制为40个字符
7.2 格式化数字
format C可指定使用固定型或科学型的格式、小数的位数以及输出的宽度。
format C( powers_of _e, digits = 3) #指定三个数字
format C( powers_of _e, digit s = 3, wi dt h= 10) #前面加上一个空格
sprint的第一个参数指定了一个格式化字符串,其中包括其他值的占位符。%s代表另一个字符串,%f 和%e 分别代表固定型格式和科学型格式的浮点数,%d 表示整数
7.3 特殊字符
可以通过\ t 插入一个制表符。注意要使用cat 而非print,因为pr int 执行的额外的转换动作会把制表符\ t 转换成反斜杠和一个“t.”。将光标移动到下一行是通过打印换行符\ n完成的
cat ( "f oo\ nbar ", fill = TRUE)
空字符\ 0 用于终止字符串。打印反斜杠符时需要连续输入两个反斜杠符,以免被误认为特殊字符,但打印时只会看到一个。使用双(单)引号,那么双(单)引号符前必须加一个反斜杠来转义:
cat ( "f oo\ "bar ", fill = TRUE)
与之相反,如果在被双引号引用的字符串中使用单引号,或在被单引号引用的字符串中使用双引号,则并不需要对其进行转义:
cat ( ' f oo"bar ' , fil l = TRUE)
7.4 更改大小写,截取、分割字串符
使用toupper和tolower函数能把字符串中的字符全部转换为大写或小写
截取子串:substring和substr,strsplit用于分割
7.5因子
因子是一个用于存储类别变量的特殊的变量类型。它有时像字符串,有时又像整数。可以通过指定levels参数来更改因子被创建时水平的先后顺序,若创建之后再改变则用factor函数。droplevels函数可用于删除因子水平
7.6 连续变量与类别变量之间的转换
一个汇总数值变量的方法是计算有多少个值落入不同的“组”(bins)中,cut 函数能将数值变量切成不同的块,然后返回一个因子。它通常使用 table 函数得到每组数字的总和,使用Beta产生类别
与上面相反的情况是把因子转换成数值变量。为了正确地把因子转换为数字,可先把因子转换为字符向量,再转换为数值。
7.7 生成因子水平
可用gl 函数来生成因子。它最简单的形式是:第一个整型参数为要生成的因子的水平数,第二个为每个水平需要重复的次数
gl ( 3, 2)
7.8 合并因子
如果我们有多个类别变量,有时把它们合并成一个单一的因子是有用的,其中每个水平由各个变量之间的交叉合并(使用interaction 函数)组成:
treatment <- gl ( 3, 2, labeIs = c("placebo", "drug A", "drug B") )
gender <- gl ( 2, 1, 6, labels = c("female", "male") )
interaction( treatment , gender )
第8章 流程控制与循环
8.1 if和else
i f 接受一个逻辑值(更准确地说是一个长度为1的逻辑向量)作为参数,且当该值为TRUE时才会执行下一条语句:
if(TRUE) message("It was true!")
If(FALSE) message("It wasn'ttrue!")
if的条件中不允许缺失值,这样做会抛出一个错误:
if(NA) message("Who knows if it wastrue?")
## Error:missing value where TRUE/FALSEneeded
当然,大部分时候你都不会直接传入TRUE或FALSE值,而是传递一个变量或表达式.在下例中,runif(1)将在0和1 之间生成一个均匀分布的随机数。如果该值超过0.5,则显示以下消息:
if(runif(1) > 0. 5) message("Thismessage appears with a 50% chance.")
与if对应的是else语句.如果if的条件值为FALSE,则会执行else之后的代码:
if(FALSE)
{
message("Thiswon't execute...")
} else
{
message("butthis will.")
}
注意:else必须与i f 语句的右大括号紧接在同一行
与很多其他的语言不同,R有一个小技巧能对你的代码重新排序来完成条件赋值。在下例中,Re 将返回复数实部(I m将返回虚部):
x <- sqrt(-1+0i)
(reality <- if(Re(x) ==0)"real"else"imaginary")
8.2.1矢量化的if
由于R几乎都是矢量化的,你大概不会惊讶于矢量化的流程控制的存在,例如ifelse函数。ifelse有三个参数:第一个是逻辑条件向量;第二个参数值在第一个向量为TRUE时被返回;第三个参数值在第一个向量为FALSE时被返回。在下例中,rbinom使用二项分布生成随机数以模拟掷硬币过程:
ifelse(rbinom(10,1,0.5),"Head","Tail")
如果条件参数中有缺失值,那么结果中的相应位置也是缺失值:
yn[c(3,6,9,12)] <- NA
ifelse(yn,1:3,-1:-12)
8.2.2多个分支
如果包含太多的else语句就会迅速降低代码的可读性。在这种情况下,可以用switch函数来美化它们。它的常见用法是:第一个参数为一个返回字符串的表达式,其后的参数为与第一个参数相匹配时的返回值。匹配参数必须与第一个参数完全一样(从R的2.11.0版本开始),且你可以使用大括号来执行多个表达式:
(greek <- switch(
"gamma",
alpha= 1,
beta =sqrt(4) ,
gamma=
{
a <- sin(pi/3)
4*a^2
}
))
如果找不到任何匹配的名字,那么switch将(隐式地)返回NULL:
(greek <- switch(
"delta",
alpha= 1,
beta =sqrt(4) ,
gamma=
{
a <- sin(pi/3)
4*a^2
}
))
8.3.1重复循环
R 中最容易掌握的循环是repeat,以下的例子将反复执行,直到你按下Escape键、退出R或世界末日降临为止:
repeat
{
message("HappyGroundhog Day!")
}
break 语句可以让代码跳出无限循环在下例中,sample函数将在每个循环迭代中返回一个操作:
repeat
{
message("HappyGroundhog Day!")
action<- sample(
c(
"Learn French",
"Make an ice statue",
"Rob a bank",
"Win heart of Andie McDowell"
) ,
1
)
message("action = ",action)
if(action == "Win heart of Andie McDowell")break
8.3.2 while循环
whi le 循环它不是先执行代码再检查循环是否应该结束,而
是先进行检查再(可能)执行代码。因为检查发生在开始时,所以循环体有可能不会被执行(与 r epeat 循环不同)。在下例中,与以上repeat的例子类似,除了当“Win heart of Andie McDowell”被抽中了,剩下的GroundhogDay 循环语句则可完全避免:
action <- sample(
c(
"Learn French",
"Make an ice stat ue",
"Roba bank",
"Win heart of Andie McDowell "
) ,
1
)
while(action! = "Win heart of AndieMcDowell")
{
message("HappyGroundhog Day! ")
action<- sample(
c(
"Learn French",
"Make an ice statue",
"Rob abank",
"Win heart of Andie McDowell "
) ,
1
)
message("action= ",action)
}
8.3.3
第三种循环适用于已知代码所需执行的循环次数的情形。for循环将接受一个迭代器变量和一个向量参数。在每个循环中,迭代器变量会从向量中取得一个值。最简单的情况下,该向量只包含整数:
for(iin1:5) message("i = ",i)
练习7:
1.构造两个新的字符串,一个元素为air,tian,kong,另一个元素为an,把两个字符串组合起来,并把分隔符改为.
2.把上述两个字符串收缩成一个字符串,打印向量时限制打印数量为10
3.构造一个名为int的函数,元素有1至6,用exp函数计算int中的数,将结果构成一个名为ant的函数,用C语言的格式化风格,并限定结果为两位数字
4.在字符串fat woe中加入一个双引号
5.如何查找R的工作目录并改变它的位置
6.如何查询因子水平和水平的级数
7.创建一个名为baby_age的数据框,一行名为age,元素为3,4,2,1,5,一行名为weight,元素为5.3,6.5,5.2,4.4,NA 并去掉元素中的NA
8.如何将因子按一定顺序排列
9.用paste函数输入蓝色,绿色,黄色,粉色糖果且用“@”作为分隔符,字串符用$连接
10.用toString函数打印数列x=(7:777)^1/2的前77个字符
练习8:
1.执行语句:当sqrt(6)小于3时,则显示F,大于3时则显示T
2.如何测试条件中是否含有缺失值
3.创建一个向量,元素为4+2i,条件为实部为3,使其输出为T,否则就输出为F
4.repeat函数的作用是什么,要如何终止循环
5.如何把repeat循环变成while循环
6.用while循环语句做出下列语句
[1] 5 5 5 5 5
[1] 4 4 4 4
[1] 3 3 3
[1] 2 2
[1] 1
7.什么情况下用for循环比较适合
8.什么时候可以用switch函数,它的常用用法是什么
9.在使用if语句时应该注意else的位置应该在哪里
练习9:
1.生成6个不同的0到1的随机向量
9.2 用lappy函数做出下列语句
[[1]]
[1] 6
[[2]]
[1] 6 6
[[3]]
[1] 6 6 6
[[4]]
[1] 6 6 6 6
[[5]]
[1] 6 6 6 6 6
[[6]]
[1] 6 6 6 6 6 6
3创建一个行数为6的方阵,并计算每行的总数和每列的平均数
4当一个标量作为输入参数,如何返回一个新的接受向量的函数
5.创建一个名为one的数据框,一列名为run,元素有Tom,Dick,Hat,用循环语句分别循环3,2,4次;一列名为jump,元素同run,分别循环4,2,3次;一列名为score1(对应run),用对数正态分布,观察数为9,对数平均为6,标准差为2,一列名为score2(对应jump),条件同score1,并计算每个人在run和jump的平均得分
6 laplry函数和sapply函数有什么不同
7.用raply函数得出5个服从标准正态分布的数,并返回列表和数据框
8.ddply函数可以替换哪个函数,优点是什么,如何调用函数应用于ddply的每一列和特定的一列
9.如何测试条件中的缺失值
10.使用state.x77的数据包,并计算其方差和平均值。
11.如何遍历树状数据?
- r入门练习(三)
- r入门练习(一)
- r入门练习(二)
- R语言入门(三)
- R入门小练习(1)
- R语言(入门小练习篇)
- R语言入门练习(1)
- R入门练习
- R入门小练习
- R入门练习(2)
- 练习三 Problem R
- R语言基础练习与入门实践
- Mac版R语言入门(三)数据的导入
- MATLAB 7.0 学习入门 -- (练习三 多项式求根)
- R*树(三)
- sed教程入门与实例练习(三)
- awk教程入门与实例练习(三)
- R语言从基础入门到提高(三)Vectors(向量)
- C# 用XiliumCefGlue做浏览器,JS和C#相互调用
- Error:java:JDK isn't specified for module
- wordpress主题无法正常使用
- HashMap分别获取键和值
- 【笔记】从架构到算法,详解美团外卖订单分配内部机制
- r入门练习(三)
- 数据结构
- NSString属性使用copy还是strong
- 使用CSS绘制三角形
- 摘花生--动态规划
- Python 迭代(6)
- 绘图和可视化--Matplotlib
- Db2 client上load from cursor报错SQL1013N The database name .. could not be found
- 解决ssh客户端与服务器加密逻辑不匹配问题