R: 将环境转换为数据框

5

我在R中有一个环境对象,想把它转换成数据框。我尝试使用as.data.frame,但它不接受环境对象。有人有想法吗?

e <- new.env(hash=TRUE,size=3)
assign(x="a",value=10,envir=e)
assign(x="b",value=100,envir=e)
assign(x="c",value=1000,envir=e)

谢谢

2个回答

4

通过将环境对象转换为列表来执行中间步骤:

as.data.frame(as.list(e))
##      c  a   b
## 1 1000 10 100

顺便说一下:实际上,每个数据帧都由一个列表表示(由相同长度的原子向量组成),并设置了一个row.names属性:

x <- data.frame(v1=1:2, v2=c("a", "b"))
unclass(x)
## $v1
## [1] 1 2
## 
## $v2
## [1] a b
## Levels: a b
## 
## attr(,"row.names")
## [1] 1 2
typeof(x)
## [1] "list"
mode(x)
## [1] "list"
is.list(x)
## [1] TRUE

同时相反的是:
x <- list(v1=1:2, v2=c("a", "b"))
attr(x, 'row.names') <- as.character(1:2)
class(x) <- 'data.frame'
print(x)
##   v1 v2
## 1  1  a
## 2  2  b

1

我走了一条更加曲折的路线,现在分享出来,虽然可能具有教育意义,但绝不是最佳方法:

data.frame(setNames(lapply(ls(e), get, envir=e), ls(e)))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接