r-eval将保存字符串解析为变量



我有一个表,里面有变量名和这个变量的观测值。其中一些观察结果应作为文本保存到变量中。

除了以下不起作用之外,我找不到任何其他方法来处理:

x    <- data.frame( c("Name1","Name2","Name3"),
c("Result1",2,"Result3") )
txt  <- paste(x[,1], "<-", x[,2], sep="")
eval(parse(text=txt))

eval(parse(text=txt((中出错:找不到对象"Result1">

我需要得到其中Name1="0"的结果;结果1";

理想情况下,您不应该在全局环境中创建这样多个对象。管理它们很困难。然而,出于某种原因,如果你必须在这里这样做,只有一种方法:

data <- type.convert(setNames(as.list(x[[2]]), x[[1]]), as.is = TRUE)
list2env(data, .GlobalEnv)

我们创建一个命名列表,其中值来自x的第二列,名称来自第一列。然后,我们使用type.convert将数据转换为它们各自的类型。最后使用list2envName1Name2Name3作为全局环境中的变量。

试试这个。问题是找不到像Result1Result2这样的对象:

#Data
x    <- data.frame( c("Name1","Name2","Name3"),
c("Result1",2,"Result3") )
#Text
txt  <- paste(x[,1], "<-", '"',x[,2],'"', sep="")
#Evaluation    
eval(parse(text=txt))

如果需要保留数字,则使用数据类型:

#Data
x    <- data.frame( c("Name1","Name2","Name3"),
c("Result1",2,"Result3"),stringsAsFactors = F )
#Text
txt  <- ifelse(!is.na(as.numeric(x[,2])),paste(x[,1], "<-", as.numeric(x[,2]), sep=""),
paste(x[,1], "<-", '"',x[,2],'"', sep=""))
#Eval
eval(parse(text=txt))

我想你可能需要调整你的数据。帧x有点像下面的

x <- data.frame(
c("Name1", "Name2", "Name3"),
c("Result1", 2, "Result3")
)
x[,2] <- type.convert(x[,2],as.is = TRUE)
x[,2] <- ifelse(is.na(as.numeric(x[,2])),paste0("'",x[,2],"'"),x[,2])

其中需要单引号''来包装Result1Result2

然后你会看到

> Name1
[1] "Result1"
> Name2
[1] 2
> Name3
[1] "Result3"
> class(Name1)
[1] "character"
> class(Name2)
[1] "numeric"
> class(Name3)
[1] "character"

最新更新