如何对rlang::syms()输出的符号列表求值以获取对应数据对象
问题原因
你直接对sym_objects整个列表调用eval()不会得到预期结果,是因为eval()默认仅对传入的顶层表达式求值,不会自动递归遍历列表元素对每个符号单独求值,所以返回的仍是原符号列表。
解决方法
方法1:base R 原生遍历实现
用lapply()遍历符号列表,对每个符号单独执行eval()即可:
result <- lapply(sym_objects, eval)
方法2:rlang 风格注入求值
如果你希望用tidyverse/rlang体系的写法,可以用!!!把符号列表注入到list()调用中,再对整个表达式求值:
library(rlang) result <- eval(expr(list(!!!sym_objects)))
两种方法返回的结果完全等价于list(mtcars, LETTERS, ToothGrowth),符合你的预期输出要求。
内容的提问来源于stack exchange,提问作者Emman
相关产品推荐
相关产品推荐

