R 将数据帧的每列提取到对象中

R 将数据帧的每列提取到对象中,r,R,我有一个包含许多列的数据框,名为foo,bar,等等 我想提取数据帧的每一列,以分离名为foo、bar等的对象。在R中是否有自动执行此操作的方法? 工作示例: mock <- structure(list( x = structure(1:3, .Label = c("1", "2", "3"), class = "factor"), y = structure(1:3, .Label = c("A", "B", "C"), class = "factor"), z = structu

我有一个包含许多列的数据框,名为
foo
bar
,等等

我想提取数据帧的每一列,以分离名为
foo
bar
等的对象。在R中是否有自动执行此操作的方法?

工作示例:

mock <- structure(list(
x = structure(1:3, .Label = c("1", "2", "3"), class = "factor"), 
y = structure(1:3, .Label = c("A", "B", "C"), class = "factor"), 
z = structure(c(1L, 1L, 2L), .Label = c("0", "1"), class = "factor")), 
.Names = c("x", "y", "z"), row.names = c(NA, -3L), class = "data.frame")
如何编写循环,从该数据帧的三列创建对象
x
y
z

> for (i in 1:ncol(mock)) {
+   assign(names(mock)[i],mock[,i])
+ }
> x
[1] 1 2 3
Levels: 1 2 3
> y
[1] A B C
Levels: A B C
> z
[1] 0 0 1
Levels: 0 1

不过,在使用
assign
时要小心。使用
attach(mock)
可以获得几乎相同的结果,这是可逆的(
detach()
),并且不会无意中覆盖现有变量(它只是屏蔽它们)。

如果忽略
attach
,而将
一起使用,会更加安全。真正理解
attach
的人不会使用它。
> for (i in 1:ncol(mock)) {
+   assign(names(mock)[i],mock[,i])
+ }
> x
[1] 1 2 3
Levels: 1 2 3
> y
[1] A B C
Levels: A B C
> z
[1] 0 0 1
Levels: 0 1