我有以下数据表(在示例中,我仅占用3行):
data <- data.table(var=c("a","b","c"), value=c(-1,2,1))
我想提取每个变量作为值,而无需每次需要它们时都对其进行子设置。 我想得到以下输出:
a <- -1
b <- 2
c <- 1
答案 0 :(得分:2)
可以选择split
返回一对key/value
。最好不要在全局环境中创建对象
lst1 <- split(data$value, data$var)
lst1
#$a
#[1] -1
#$b
#[1] 2
#$c
#[1] 1
但是,如果需要的话,
list2env(lst1, .GlobalEnv)
a
#[1] -1
b
#[1] 2
c
#[1] 1
或者另一个选项是deframe
,然后使用list2env
library(tibble)
list2env(as.list(deframe(data)), .GlobalEnv)
答案 1 :(得分:1)
尽管不建议在全局环境中创建对象,但是我们可以尝试eval(parse(...))
方法来解决您的问题,
eval(parse(text = do.call(paste, c(data, sep = '<-'))))
a
#[1] -1
b
#[1] 2
c
#[1] 1
答案 2 :(得分:1)
使用purrr
:
res<-purrr::map2(data$var, data$value,
function(x,y)
x <- y
)
names(res) <- data$var
以上在获得结果后设置名称。
res
$a
[1] -1
$b
[1] 2
$c
[1] 1
使用base
的{{1}},我们可以使用:
mapply
或者:
as.list(mapply(function(x,y) assign(x,y,new.env()),
data$var,data$value))
$a
[1] -1
$b
[1] 2
$c
[1] 1