eval 解析保存字符串到变量

eval parse save string to variable

我有 table 变量名称和对该变量的观察。其中一些观察结果应作为文本保存到变量中。

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

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 = "Result1" 的结果

试试这个。问题是无法找到像 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))

我猜你可能需要调整你的 data.frame 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"

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

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

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