我有一个表,里面有变量名和这个变量的观测值。其中一些观察结果应作为文本保存到变量中。
除了以下不起作用之外,我找不到任何其他方法来处理:
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
将数据转换为它们各自的类型。最后使用list2env
将Name1
、Name2
和Name3
作为全局环境中的变量。
试试这个。问题是找不到像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))
我想你可能需要调整你的数据。帧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"