R语言编程艺术(11、14、15)

#11. 字符串操作
  a<-c("Equator","North Pole","South Pole")
  grep("Pole",a)#在字符串a中搜索Pole
  
  nchar(a)#返回字符串a的长度(R语言中的字符串末尾没有空字符NULL)
  #对于非字符形式就要用到Hadley Wickham写的stringr包
  
  paste("North","Pole",sep="")
  b<-sprintf("the square of %d is %d",8,8^2)#按一定格式把若干个组件组合成字符串
  substr(b,5,10)#返回给定字符串中指定位置范围5:10上的子字符串
  strsplit(b," ")#根据b中的字符串,把字符串b拆分成若干个子字符串
  regexpr("uat","Equator")#在字符串Equator中寻找uat,返回与uat匹配的全部子字符串的起始位置
  
  #正则表达式:用来描述一系列字符串的简略表达式
  grep("[au]",a)#表示a中含有字母a或u的字符串
  grep("o.e",a)#表示a中含有以o开头,后跟任意一个字符,并以e结尾的字符串
  grep("N..t",a)#表示a中含有以N开头,后跟任意两个字符,并以t结尾的字符串
  
  #元字符:不按照字面意思理解的字符
  grep(".",a)#得到的不是想要的结果,因为.是元字符
  grep("\\.",a)#反斜杠\使它脱离句点的元字符属性,用两个\的原因是\自身也必须脱离元字符属性


 #14. 速度与内存
  #使R代码速度更快的办法:
   #1.通过向量化的方式、使用字节码编译
   #2.把最消耗CPU的部分用编译型语言编写,如使用C
   #3.将代码用某种并行的方式进行编写
  #可怕的for循环:
   #1.用向量化提升速度:
   #有可能加速代码的向量化函数包括:ifelse(),which(),where(),any(),all(),cumsum(),cumprod()
   #对于矩阵,rowSums(),colSums()
   #对于“穷举所有组合”,combn(),outer(),lower.tri(),upper.tri(),expand.grid()
   #apply()可消除显示循环,但实际上使用R而不是CC实现的,通常不能加速代码
   #但其他的apply函数,如lapply()对于加速代码很有帮助
   #system.time(代码)#代码运行时间
   #outer(X,Y,FUN)#将FUN函数应用于X和Y中的元素所有可能配对之上
  #函数式编程和内存问题
   #向量赋值问题:
   a<-c(1,4,6,8,3,7)
   a[3]<-9#先创建a的副本,再将副本中的第3个元素更改为9,最后再将得到的向量赋值给a
   #表面上看只修改了向量的一个元素,但含义是“整个向量都被重新计算了”
   
   #改变时拷贝:R经常会采取改变时拷贝的机制,同样也会存在例外
   b<-runif(10);
   tracemem(b)#返回b的内存地址
   b[3]<-9;tracemem(b)
  #利用Rprof()来寻找代码的瓶颈
   x<-runif(10)
   Rprof()
   fz<-function(x) x[3]<-3
   invisible(fz(x))#不让输出结果被展示出来
   Rprof(NULL)
   summaryRprof()
  #字节码编译:
   library(compiler)
   x<-runif(100000);y<-runif(100000);z<-c()
   fz<-function(x,y) {for(i in 1:length(x)) z[i]<-x[i]+y[i]}
   cf<-cmpfun(fz)
   system.time(cf(x,y))
  #内存无法装下数据的处理办法:数据分块或利用R软件包来进行内存管理
   RMySQL包:R到SQL数据库的一个接口
   biglm包;可以在非常大的数据集上进行回归和广义线性模型的分析
   bigmemory包:不仅可以将数据存储在硬盘上,还可以将数据保存在机器的主内存上

   


#15. R与其他语言的接口
  #调用C:
   #获得Borland的自由编译器的网址为ttp://www.borland.com/bcppbuilder/freecompiler/ 
   #dyn.load("filename.dll")#导入由C编译得到的DLL库,即加载编译好的C程序
   #.C(函数名,as.double(参数1),as.double(参数2),....)#返回的包含所有调用参数的列表
   #若修改了C程序,则先用dyn.unload("filename.dll")卸载,再重新导入
   #另外还可以用.Call调用,具体可参照R随机手册Write R Extensions第5章
   
   #还可以从Python调用R,最常用的接口是RPy,可从http://rpy.sourceforge.net下载源代码并自己编译模块



  































  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Trisyp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值