拆分矩阵并在循环中保存单独的变量

时间:2018-01-08 14:37:38

标签: r variables matrix

我的数据是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很大时,这是不可行的。 所以我想知道使用循环是否可行。

1 个答案:

答案 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

但是,你应该有充分的理由这样做!