R语言基础编程技巧汇编 - 14

本文介绍了R语言中的实用技巧,包括并行比较函数pmin和pmax的使用、特殊值的含义、函数构造方法、取整函数的区别、生成素数的方法、Reduce函数的应用、文件属性的获取、坐标轴标签的调整、中文显示的实现、图形布局的设置、时间格式的转换、C++代码的嵌入等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.     “平行”比较函数pminpmax

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四舍五入取整;

turnc0取整;

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)

})


上面是帮助文档中的例子。

eruptionrug疏密与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. 时间格式转换跟系统环境的关系

时间格式跟很多环境设置相关:货币、语言、时间,中、西方不同,WindowsLinux也有微小的不同,见帮助例子

#先搞个中文的

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值