不带引号的字符

时间:2019-05-26 04:48:39

标签: r

有时数据文件来自.rdata对象。与.rds文件相比,这些文件很烦人,因为对象具有预定义的名称。就我而言,我想自动重命名对象并摆脱名称错误的版本。简单的人为例子:

#make a new iris with a bad name
badnameiris = iris
#save it to a file
save(badnameiris, file = "iris.rdata")
#rename badname version from global envir
rm(badnameiris)
#read iris from file
irisname = load("iris.rdata")
#this variable is not iris, but the name of the variable it was assigned to
irisname
[1] "badnameiris"
#it's to use the right name with get()
goodnameiris = get(irisname)
#but harder to get rid of the wrong one with rm()
rm(irisname)

最后一行不能按预期工作,因为它需要输入一个简单的名称并获得一个字符向量。我意识到实际上可以使用list中的rm()参数,但假设不能。

通常,出于这些目的,如何将字符从无引号转换为无引号?

我尝试了 rlang 函数,但是这些函数用于 tidyverse 上下文中的非标准评估。我尝试了as.name()as suggested here。也不起作用。我能找到的大多数与此问题有关的问题都与 tidyverse 有关,但我正在尝试建立基础R上下文。

(上面的替代解决方案是创建一个函数,该函数利用对本地环境的破坏来删除对象的不需要的副本。)

1 个答案:

答案 0 :(得分:4)

只需使用do.call:

x <- 1
s <- "x"
do.call(rm, list(s))
ls()
#[1] "s"

或根据语言进行计算

eval(bquote(rm(.(s))))