我的数据是m * n矩阵。我想逐列拆分矩阵,并将每列分别保存在不同的向量中。 E.g
data<-matrix(1:9, ncol=3)
我希望vec1
包含第一列
vec1
将转换[1,2,3]
,一个尺寸为3 * 1的列矩阵,它基本上是第一列数据。同样,vec2
代表第二列,vec3
代表最后一列。
我知道我可以通过重复
手动执行此操作vec1<-data[,1],
vec2<-data[,2]
...
vecn<-data[,n].
然而,当n很大时,这是不可行的。 所以我想知道使用循环是否可行。
答案 0 :(得分:0)
正如已经指出的那样,这可能不是一个好主意。但是,如果您仍然觉得需要继续沿着此路径前进,而不是使用list
或仅使用源matrix
本身,最简单的方法可能是使用{{1}的组合}和list2env
。
这是一个演示,一步一步:
data.frame
如果您想要单列data <- matrix(1:9, ncol=3)
ls() # Only one object in my workplace
# [1] "data"
data_list <- unclass(data.frame(data))
str(data_list)
# List of 3
# $ X1: int [1:3] 1 2 3
# $ X2: int [1:3] 4 5 6
# $ X3: int [1:3] 7 8 9
# - attr(*, "row.names")= int [1:3] 1 2 3
ls() # Two objects now
# [1] "data" "data_list"
list2env(data_list, envir = .GlobalEnv)
ls() # Five objects now
# [1] "data" "data_list" "X1" "X2" "X3"
X1
# [1] 1 2 3
,可以使用data.frame
:
split.list
把它们放在一起,你实际上可以一次完成所有这些(首先不必创建“data_list”),如下所示:
list2env(setNames(split.default(data.frame(data), seq(ncol(data))),
paste0("var", seq(ncol(data)))), envir = .GlobalEnv)
var1
# X1
# 1 1
# 2 2
# 3 3
但是,你应该有充分的理由这样做!