找回密码
 立即注册
查看: 8127|回复: 0

R语言 eval 和 parse 函数-如何将字符串转变为命令行?

[复制链接]
发表于 2013-12-11 16:53:10 | 显示全部楼层 |阅读模式
本帖最后由 editor 于 2013-12-11 16:55 编辑

如何将字符串转变为命令行?
这里用到eval()和parse()函数。首先使用parse()函数将字符串转化为表达式(expression),
而后使用eval()函数对表达式求解。
  1. x<-1:10
  2. a<-"print(x)"
  3. class(a)
  4. eval(parse(text=a))
复制代码
但在字符串转化为expression过程中可能会有一些小麻烦,比如下面这种情况:
  1. a<-3
  2. x<-4
  3. str2expr<-function(x){eval(parse(text=x))}
  4. str2expr('a+a*sqrt(x)')
复制代码
但这时候会报错,原因是参数名为x,且外部的变量名也为x,而实际上eval在对expression做
eval的时候优先找最近的上一层的x,也就是“参数x”,而不是“数字x”,所以sqrt要报错。
那么上面的代码需要变通一下:
  1. a<-3
  2. x<-4
  3. str2expr<-function(y){eval(parse(text=y))}
  4. str2expr('a+a*sqrt(x)')
复制代码
或者设置函数表达式中的所有变量都是全局变量,即在eval能够在.GlobalEnv中能找到:
  1. str2expr<-function(x){eval(parse(text=x),.GlobalEnv)}
复制代码
注意:
eval() 中的参数需要的是表达式。
parse() 中参数是用于构建表达式的字符串


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|R语言中文网

GMT+8, 2024-11-25 08:24 , Processed in 0.024573 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表