R语言基础编程技巧汇编 - 14
2015-04-02 21:44
302 查看
1. “平行”比较函数pmin和pmax
例1:pmin(5:1,pi,1:5)
[1] 1 2 3 2 1
例2:
pmax(5:1,pi,1:5)
[1] 5.0000004.000000 3.141593 4.000000 5.000000
比较多个向量“对应”位置的值,并取出最大或最小的值,将这些值组成一个向量返回。
比如上面的例子1中,相当于比较(5,4,3,2,1), (pi,pi,pi,pi,pi),
(1,2,3,4,5)三个向量的值,pmin函数取出对应位置中最小的值,依次为:1,2,3,2,1.
2. NA,NaN,Inf,NULL的区别
这几个都是R语言里的特殊值。NA表示缺失值,即“Missing value”,是“not
available”的缩写。主要会在从文件或数据库读取数据时遇到,或者将一个向量的长度扩展会出现NA值,例如:
> v <- c(1,2,3)
> v
[1] 1 2 3
> length(v) <- 4
> v
[1] 1 2 3NA
Inf和-Inf就是指正负无穷,或者除以0时会出现,例如:
> 2^1024
[1] Inf
> -2^1024
[1] -Inf
> 1/0
[1] Inf
NaN表示无意义,即“not a number”,例如:
> Inf-Inf
[1] NaN
> 0/0
[1] NaN
另外,R语言中还有一种Null对象,一般被用在函数参数中,表示该参数没有被赋予任何值,或者某些函数返回值为Null。
3. 利用body和formals构造函数体
> e <-expression(y <- x^2, return(y)) # or a list> body(f) <-as.call(c(as.name("{"), e))
> f
function (x)
{
y <- x^2
return(y)
}
require(stats)
require(graphics)
length(formals(lm)) # the number of formal arguments
names(formals(boxplot)) # formal arguments names
f <-function(x) a+b
formals(f) <-alist(a = , b = 3) # function(a, b = 3) a+b
f(2) # result = 5
4. 各种”取整”函数
floor向下取整;ceiling向上取整;
round四舍五入取整;
turnc向0取整;
signif保留给定位数的精度。
5. 生成素数(质数)
素数包:pracma 有两个函数primes(n) 生成n内的所有素数
isprime(n) 返回1或者0,判断某个数是否是素数
6. Reduce函数的用法
理解Reduce函数:它是将一个向量按相邻两个元素依次作二元函数运算,最后输出结果。Reduce的基本参数两个,参数1是二元函数,参数2是运算向量
比如:a=c(12,25,3,8)
Reduce("+",a)
[1] 48
例子中:“+”是二元函数,a是向量,函数实际等价于下面算式
"+"("+"("+"(12,25),3),8)
[1] 48
如果二元函数选“-”
Reduce("-",a)
[1] -24
同样等价于下面算式
"-"("-"("-"(12,25),3),8)
[1] -24
以上计算都只输出最终结果,如果需要逐步计算结果,加上accumulate=TRUE选项
>Reduce("+",a,accumulate=TRUE)
[1] 12 37 40 48
运算过程如下图所示:
计算顺序默认是按向量顺序从左向右,如果要从右向左计算,加上right=TRUE选项
Reduce("-",a,right=TRUE)
[1] -18
与下面算式等价
"-"(12,"-"(25,"-"(3,8)))
[1] -18
Reduce函数的应用可以有许多扩展,可用于矩阵,可使用自定义的二元函数等,产生复杂的功能组合。
7. 获取文件的属性信息
file.info函数可以得到文件的各种属性,包括大小、是不是文件夹、创建时间、修改时间等,例如:file.info("file.txt")$size
8. rug函数在坐标轴上标出频率(轴须)
rug是在坐标轴上标出元素出现的频数(轴须)。出现一次,就会画一个小竖杠。从rug的疏密可以看出变量是什么地方出现的次数多,什么地方出现的次数少。require(stats) #both 'density' and its default method
with(faithful, {
plot(density(eruptions, bw = 0.15))
rug(eruptions)
})
上面是帮助文档中的例子。
eruption的rug疏密与eruption的概率密度函数的高低是对应的。rug越密,density越高。
9. 把坐标轴标签的顺序颠倒
plot(1:10,xlim =c(10,1),ylim = c(10,1))10. 利用Cairo包在pdf图形中显示中文
library(Cairo);CairoPDF("C:\\Cairo.pdf");
plot(1:10,main="这是宋体",family="simsun");
plot(1:10,main="这是黑体",family="simhei");
plot(1:10,main="这是华文彩云",family="STCAIYUN");
dev.off();
11. 为什么read.table读取数据后,列名前面加上了X
问题:为什么我读取数据后,年份前面出现了X? 如图: |
= FALSE来取消这个规则。
12. 用Sys.sleep函数暂停R程序
Sys.sleep()函数可以让R脚本的进程挂起一定的时间。13. 图形布局函数layout
layout函数可以将绘图窗口分割成小块,可以同时显示多幅图形。x <- pmin(3,pmax(-3, stats::rnorm(50)))
y <- pmin(3,pmax(-3, stats::rnorm(50)))
xhist <-hist(x, breaks = seq(-3,3,0.5), plot = FALSE)
yhist <-hist(y, breaks = seq(-3,3,0.5), plot = FALSE)
top <- max(c(xhist$counts,yhist$counts))
xrange <- c(-3,3)
yrange <- c(-3,3)
nf <-layout(matrix(c(2,0,1,3),2,2,byrow = TRUE), c(3,1), c(1,3), TRUE)
layout.show(nf)
14. 时间格式转换跟系统环境的关系
时间格式跟很多环境设置相关:货币、语言、时间,中、西方不同,Windows和Linux也有微小的不同,见帮助例子#先搞个中文的
Sys.setlocale("LC_TIME","Chinese")#Window下,中文
dd="2005-六月-2日"
as.Date(dd,format="%Y-%b-%d")
#再比如英文的
Sys.setlocale("LC_TIME","English") #Windows下英文
d="2005-Jun-27"
as.Date(d,format="%Y-%b-%d")
#it works
?Sys.setlocale
看看你电脑的系统位置
Sys.getlocale()
15. 用Rcpp包在R代码中嵌入简短的C++代码
在RStudio中执行会提示需要安装RTools工具,根据提示安装即可。比如,用C++编写一个三个数相加的函数,执行以下R代码:
library(Rcpp)
cppFunction('
int add(int x, int y, int z) {
int sum = x + y + z;
return sum;
}'
)
然后使用这个函数:
add(5,4,3)
[1] 12
相关文章推荐
- R语言基础编程技巧汇编 - 13
- R语言基础编程技巧汇编 - 6
- R语言基础编程技巧汇编 - 21
- R语言基础编程技巧汇编 - 24
- R语言基础编程技巧汇编 - 2
- R语言基础编程技巧汇编 - 15
- R语言基础编程技巧汇编 - 26
- R语言基础编程技巧汇编 - 4
- R语言基础编程技巧汇编 - 12
- R语言基础编程技巧汇编 - 8
- R语言基础编程技巧汇编 - 20
- R语言基础编程技巧汇编 - 5
- R语言基础编程技巧汇编-前言
- R语言基础编程技巧汇编 - 11
- R语言基础编程技巧汇编 - 25
- R语言基础编程技巧汇编 - 22
- R语言基础编程技巧汇编 - 16
- R语言基础编程技巧汇编 - 23
- R语言基础编程技巧汇编 - 10
- R语言基础编程技巧汇编 - 9