【问题标题】:R: a for statement wanted that allows for the use of values from each rowR:需要一个允许使用每一行的值的 for 语句
【发布时间】:2012-01-05 21:24:19
【问题描述】:

我对 R.. 很陌生。

我正在读取一个看起来像这样的文件:

1 2 1
1 4 2
1 6 4

并将其存储在矩阵中:

matrix <- read.delim("filename",...)

有谁知道如何制作一个 for 语句,每次迭代将一行的第一个和最后一个数字相加?

所以输出将是:

2
3
5

非常感谢!

编辑:我的错,我应该更清楚地说明这一点...... 我实际上对实际的 for 循环更感兴趣,我可以在每次迭代中使用该特定行上任何列的多个值。将数字相加只是一个例子。我实际上计划对这些值做更多的事情(超过 2 列),并且有很多行。

所以有些东西是:

for (i in matrix_i) #where i means each row
{
#do something with column j and column x from row i, for example add them up
}

【问题讨论】:

  • 再看一下大卫的回答 - 您可以将 x[1] + x[3] 替换为值和函数的任意组合,以使用矩阵中的任何或所有列创建任意复杂的函数。没有更多细节,听起来你仍然不需要在这里循环。

标签: r for-loop


【解决方案1】:

如果你想从中得到一个向量,使用 apply 而不是 for 语句更简单(并且计算速度略快)。在这种情况下,

sums = apply(m, 1, function(x) x[1] + x[3])

此外,您不应将变量称为“矩阵”,因为这是内置函数的名称。

ETA:有一种更简单且计算速度更快的方法。 R 允许你拉出列并将它们添加在一起(因为它们是向量,它们将按元素添加):

sums = m[, 1] + m[, 3]

m[, 1] 表示数据的第一列。

【讨论】:

    【解决方案2】:

    这些方面的东西应该相当有效(即这是一种矢量化方法):

    m <- matrix(c(1,1,1,2,4,6,1,2,4), 3, 3)
    #      [,1] [,2] [,3]
    # [1,]    1    2    1
    # [2,]    1    4    2
    # [3,]    1    6    4
    
    v <- m[,1] + m[,3]
    # [1] 2 3 5
    

    【讨论】:

      【解决方案3】:

      您可能可以使用应用函数或矢量化方法 --- 如果可以,您真的应该这样做,但是您询问如何在 for 循环中执行此操作,所以这里是如何做那。 (让我们称您的矩阵为m。)

      results <- numeric(nrow(m))
      for (row in nrow(m)) {
          results[row] <- m[row, 1] + m[row, 3]
      }
      

      【讨论】:

        【解决方案4】:

        这可能是给猫剥皮的 100 种方法之一。您可能正在寻找rowSums 函数,尽管您也可以使用apply 函数找到许多答案。

        【讨论】:

          猜你喜欢
          • 2021-11-20
          • 1970-01-01
          • 2013-02-26
          • 2011-08-18
          • 1970-01-01
          • 1970-01-01
          • 2020-04-17
          • 1970-01-01
          • 2010-12-27
          相关资源
          最近更新 更多