几个数据帧一次进入矩阵

时间:2015-07-13 00:50:54

标签: r loops matrix dataframe

我是R的新手,所以我很抱歉,如果这不是一个好问题。 我有几个名为matrix1matrix2等的数据框。 我想在循环中使用这两个命令:

A1=as.matrix(matrix1)

B1=graph.adjacency(A1,mode="directed",weighted=NULL,diag=FALSE) 

但我无法弄清楚如何让循环更改矩阵的名称。 提前谢谢!

2 个答案:

答案 0 :(得分:1)

使用assign()在循环中创建矩阵/ data.frames。在循环中调用带编号的矩阵/ data.frame时,请使用get()

for (i in 1:n) {
  assign(paste0("A", i), unname(as.matrix(get(paste0("matrix", i)))))
  assign(paste0("B", i), graph.adjacency(get(paste0("A", i)),
                                         mode     = "directed",
                                         weighted = NULL,
                                         diag     = FALSE))
}

答案 1 :(得分:1)

您可以使用get按名称获取变量。

e.g。

for (i in 1:n) {
    A1 = as.matrix(get(paste0('matrix', i)))
    B1 = graph.adjacency(A1,mode="directed",weighted=NULL,diag=FALSE) 
}

如果你想存储 B1,你可以使用(例如)列表:

Bs <- lapply(1:n, function (i) {
                A1 = ...
                B1 = ...
                return(B1)
             })

然后Bs[[i]]将包含矩阵i的B1

然后,进一步改进 - 而不是手动命名所有矩阵matrix1matrix2,...,matrix10000(特别是如果你有很多这些!),将它们存储在列表中会更好,例如As[[i]]matrix我。 (我无法为您提供有关如何执行此操作的具体代码,因为它取决于矩阵的来源/填充方式。例如,您可能lapply(list_of_filenames, read.csv)从文件列表中读取所有矩阵名)。

然后你可以:

Bs <- lapply(As, graph.adjacency, mode="directed", weighted=NULL, diag=FALSE)

不诉诸get