如何在R中评估字符向量中的多个表达式并返回结果向量?
如何批量评估字符串形式的表达式向量并返回结果向量
我们知道,评估单个字符串表达式可以用eval(parse(text = "表达式")),示例如下:
"1+1" eval(parse(text = "1+1")) # 输出:2
但当传入字符串构成的表达式向量时,eval(parse(text = c("1+1","2+2","3+3")))只会返回最后一个表达式的结果6,怎么才能得到所有表达式的结果向量c(2,4,6)?
方法1:使用sapply遍历处理
用sapply逐个处理向量中的每个字符串表达式,可直接得到带命名的结果向量;若需要无命名的纯数值向量,添加USE.NAMES = FALSE即可:
expr_vec <- c("1+1","2+2","3+3") # 带命名的结果 sapply(expr_vec, function(x) eval(parse(text = x))) # 输出:1+1 2+2 3+3 # 2 4 6 # 无命名的纯数值向量 sapply(expr_vec, function(x) eval(parse(text = x)), USE.NAMES = FALSE) # 输出:2 4 6
方法2:用lapply结合unlist转换
lapply会返回包含单个结果的列表,后续用unlist将其转换为向量:
expr_vec <- c("1+1","2+2","3+3") unlist(lapply(expr_vec, function(x) eval(parse(text = x)))) # 输出:2 4 6
方法3:先生成表达式列表再批量评估
parse处理字符串向量时会生成表达式列表,直接用sapply遍历这个列表并执行eval:
expr_vec <- c("1+1","2+2","3+3") expr_list <- parse(text = expr_vec) sapply(expr_list, eval) # 输出:2 4 6
内容的提问来源于stack exchange,提问作者Guibor Camargo Salamanca
相关产品推荐
相关产品推荐

