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" 的结果
试试这个。问题是无法找到像 Result1
或 Result2
这样的对象:
#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])
需要单引号 ''
来包裹 Result1
和 Result2
然后你会看到
> 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
将数据转换为各自的类型。最后使用 list2env
将 Name1
、Name2
、Name3
作为全局环境中的变量。
我有 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" 的结果
试试这个。问题是无法找到像 Result1
或 Result2
这样的对象:
#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])
需要单引号 ''
来包裹 Result1
和 Result2
然后你会看到
> 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
将数据转换为各自的类型。最后使用 list2env
将 Name1
、Name2
、Name3
作为全局环境中的变量。