ITPub博客

首页 > > > R语言元编程:表达式

R语言元编程:表达式

作者:浪花小雨滴 时间:2019-06-13 14:58:56 0 删除 编辑

作者:黄天元,复旦大学博士在读,热爱数据科学与开源工具(R),致力于利用数据科学迅速积累行业经验优势和科学知识发现,涉猎内容包括但不限于信息计量、机器学习、数据可视化、应用统计建模、知识图谱等。知乎专栏:R语言数据挖掘。邮箱:huang.tian-yuan@qq.com.欢迎合作交流。


引言:

R是一门语言,语言是沟通的桥梁,不仅能够读懂,还要能书写。目前对于R语言的用户(包括我),大多都满足于“拿来主义”,复制粘贴别人的代码来实现前人已经实现过的优秀功能。但是这是远远不够的,从复制到创造,必须要知道如何进行元编程(meta programming)。因此希望开设元编程系列,希望这个系列结束之后,所有读者(包括我自己)都能够用R语言随心所欲地表达自己的数据思维,能够自己写一个属于自己的包。主要参考书:

Mastering Software Development in R​bookdown.org图标


首先要介绍的,是quote函数。R语言中所有的东西都可以放在这个函数里面,它表示对这段代码的一种变量保存的形式。

quote(2+2)

quote(a <- 2+2)

quote(a1)

可以尝试把quote函数的返回值保存起来。

quote(a <- 2+2) -> for_evaluation

那么这段引用就保留在for_evaluation这个变量中。

如果要执行for_evaluation这个表达式,那么可以使用eval函数。

eval(for_evaluation)

不过这样是不会有结果的,因为赋值语句本身不会输出结果,结果我们保存在a变量中了。

a

[1] 4

如果原始R代码是字符串格式的,可以用parse函数进行转化,再用eval函数进行评估。

tpt_string <- "1:5"

tpt_expression <- parse(text = tpt_string)

eval(tpt_expression)

parse的逆运算,叫做deparse,可以把表达式转化为字符串。

deparse(for_evaluation)

[1] "a <- 2 + 2"

原文作者:;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2018-05-16

  • 博文量
    4259
  • 访问量
    39920