【问题标题】:Assign value to one column of a matrix in a loop在循环中为矩阵的一列赋值
【发布时间】:2017-02-24 06:55:31
【问题描述】:

我想知道是否有一种简单的方法可以使用“for”循环生成具有顺序名称的矩阵列表,然后给出其中一个列的值。

for(i in 1:3)
{
  assign(paste0("matrix",i), matrix(NA, nrow = 4, ncol = 6))
  assign(get(paste0("matrix",i))[,1], rep(i, 4))
}

在上面的代码中,我尝试创建3个矩阵matrix1、matrix2和matrix3,它们的第一列旨在分配rep(1, 4)、rep(2, 4)、rep(3, 4)的值)。但是,R 给出了错误消息。

Error in assign(get(paste0("matrix", i))[, 1], rep(i, 4)) : 
  invalid first argument

感谢您的帮助。

【问题讨论】:

    标签: r for-loop matrix


    【解决方案1】:

    如果您的目标是制作矩阵列表,我建议您使用list。将它们放在真正的list 中,而不是放在主环境中,因为名称相似的对象会产生更多的凝聚力,并使您的代码更易于理解。

    matrix_list = lapply(1:3, function(x) matrix(NA, nrow = 4, ncol = 6))
    names(matrix_list) = paste('matrix', 1:3)
    

    您看到的错误可能是因为assign 需要character 作为输入。仔细阅读 assignget 的文档(永远不要再使用它们;))。

    【讨论】:

    • 谢谢。实际上,我的代码 for(i in 1:3) {assign(paste0("matrix",i), matrix(NA, nrow = 4, ncol = 6))} 可以像您的代码一样生成 3 个矩阵。我的问题是有没有办法在每个循环中为列值分配变量名。再次感谢。
    • 另外,我阅读了assign 的文档,我的代码assign(get(paste0("matrix",i))[,1], rep(i, 4)) 应该是错误的。谢谢。
    猜你喜欢
    • 2015-07-04
    • 2019-05-24
    • 1970-01-01
    • 1970-01-01
    • 2011-12-16
    • 1970-01-01
    • 1970-01-01
    • 2020-08-19
    • 2018-07-16
    相关资源
    最近更新 更多