您的位置:首页 > 编程语言

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?

如图:



回答:如果变量名(列名)不符合变量命名的语法规则,比如以数字开头,R语言会自动在列名前加上X,可以在read.table的时候加上check.names
= 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: