R中是否有等效的ast.literal_eval python方法

时间:2018-02-08 14:24:42

标签: r

eval函数不同,ast.literal_eval函数安全评估表达式节点或包含Python文字或容器显示的字符串。提供的字符串或节点可能只包含以下Python文字结构:字符串,字节,数字,元组,列表,dicts,集合,布尔值和None。
即。它只评估包含文字或容器的字符串,它不评估包含代码的字符串!

我想知道R中是否有相当于literal_eval的方法?提前致谢!

参考: ast.literal_eval function

1 个答案:

答案 0 :(得分:0)

safely evaluating arithmetic expressions的回答允许创建类似于ast.literal_eval的函数用于字符串输入。
此函数将input字符串以及allowed操作作为参数进行评估,其默认值类似于ast.literal_eval允许的值:

literal_eval <- function(input, allowed = c("list", "c", "+", "-", "/", "*")) {
  # Create safe empty environment
  safe_env <- new.env(parent = emptyenv())
  
  # assign allowed functions
  lapply(allowed,function(f) assign(f,get(f, "package:base"),safe_env))

  # Evaluate input
  safe_env$expr <- parse(text = input)
  eval(substitute(expr,env = safe_env), env = safe_env)
}

literal_eval("1+1")
[1] 2

literal_eval("c(1,2)")
[1] 1 2

literal_eval("list(2,3)")
[[1]]
[1] 2

[[2]]
[1] 3

literal_eval("system('delete *.*')")
 Error in system('delete *.*') : unknown function "system"