转自:http://chenangliu.info/cn/detailed-question-in-r-programming/
又是很久很久没更博客了,一直想写一些有点营养的东西,无奈水平有限力不从心,今天逛论坛的时候突然觉得R版里的求助帖往往是一些具有普遍性的问题,而且有些细节甚至还比较重要,之前学R的时候就好几次碰到一些很简单的问题,但就是想不起来该怎么操作。综上所述,我就象征性的精选了几个相对比较有意思的问题,一方面作为笔记万一哪天忘记了方便查,另一方面与大家分享也算是积德行善。废话到此为止,切入正题~
1 取整运算
在编程实现的时候有时会碰到对数值取整的需求,而取整的方式却多种多样,依赖于具体问题,不过在R中已经配备了种类齐全的相关函数,主要包括以下五种:
floor():向下取整;
ceiling(): 向上取整;
round(): 四舍五入取整;
trunc(): 向0取整;
signif(): 保留给定位数的精度。
2 浮点数
关于浮点数的问题几乎在每一本关于数值分析的书中都会在第一章中提及,而因为浮点数导致的计算精度问题也几乎在各式各样的数学和统计软件中碰到,不妨看一个比较简单的例子
> sum(c(2,1.2,-0.8,-2.4,3,1.2,3.1,-1.5,-4.4,-1.4))
[1] -2.220446e-16
如果你有强迫症,或许下面的命令可以拯救你(所谓强制转换为整数,当然也可以采用问题1中所提及的方法)
as.integer(sum(c(2,1.2,-0.8,-2.4,3,1.2,3.1,-1.5,-4.4,-1.4)))
3 数据框合并
数据框的整合是R中处理数据时的家常便饭,面对这类问题,一般来说最佳选择必然是Hadley的dplyr包,玩转数据框必备且实属精品,当然除此之外,R
base本身自带的merge()也可以起到类似的效果,关于merge的使用,除了R中的帮助文档外,还可以stackoverflow上的这篇帖子。至于dplyr,
不妨用一个例子来说明问题
library(dplyr);
set.seed(100);
df1
df1;
df2
df2;
inner_join(df1,df2,by="Num");
4 关于赋值
不同于MATLAB,
R中的赋值符号除了传统的"="外,还有"",出于对某种赋值方式的偏好,也逐渐出现了等号党和箭头党,但到底孰好孰坏,显然争不出任何结果,相对来说更重要的倒是了解这两者的区别。在大部分情况下,两者等价,但是需要注意以下区别:
(1) 等号只能单向赋值,例如x = 10; 箭头符号可以双向赋值,即xx等价
(2) 在函数中赋值(参数传递)只能使用"=",
尽管使用"
> matrix(1:6,ncol
[,1] [,2]
[1,] 1 4
[2,] 2 5
[3,] 3 6
> matrix(1:6,ncol=3)
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
事实上第一条命令等价于 matrix(1:6,3) ,
因为在默认的参数排序中nrow排在ncol之前,从而将数字3赋值给了nrow.
(3)除函数内参数赋值外,能用"="等地方一定能用"
当然除了上述两种赋值方式外,还有一种赋值方式"<
5 工作目录
由于涉及到读取和存储数据等问题,工作目录有时候也是一个会被关心的问题,但真正会涉及到的无非就是工作目录的获取和修改,分别对应如下两个函数
getwd():理论上可以不用在括号里加任何东西
setwd():若需要重新设置工作目录,只需在括号中添加新的路径即可
6 概率分布
关于这一点,CRAN上有一个专门针对这个话题的Task View,所以也就无需多言了,直接附上链接
7 字符大小写转换
tolower() #全部转为小写
toupper() #全部转为大写
8 查看上一步的运算结果
类似于MATLAB中的ans,
R中也有类似于可以查看上一步运行结果的变量 .Last.value,值得一提的时,由于前面多了一个点,因此这是一个隐藏变量,所以在
ls()中是查不到的。
> 1+1
[1] 2
> .Last.value
[1] 2
9 更改相关的默认设置
相应的默认设置譬如语言、工作目录、需自动加载的包等都可在R安装目录下的etc文件中修改。
10 特殊符号
NA: 缺失数据
NaN: 无意义的数
Inf: 正无穷大
-Inf: 负无穷大
11 快捷键
利用快捷键往往可以省去很多点鼠标的功夫或是加快码代码的速度,譬如Tab可以实现自动补全,Alt+"-"可以直接输出"
(Rstudio) 以及Ctrl+R 运行当前代码等等。
说明
本文素材大多取自于人大经济论坛R语言专版,在此表示感谢,由于大多凭记忆整理,所以大多数主题已记不清原始链接非常抱歉,此外本文也会继续参考有意思的求助帖持续更新。
-
See more at:
http://chenangliu.info/cn/detailed-question-in-r-programming/#sthash.N2w03DSB.dpuf