【问题标题】:Function returns quadratic matrix in R [closed]函数返回 R 中的二次矩阵 [关闭]
【发布时间】:2018-12-07 09:11:56
【问题描述】:

我创建了一个函数,它返回一个二次矩阵,其每个元素是行号或列号的平方,具体取决于哪个更大 这是我的代码,但到目前为止它不起作用。 有人可以帮忙吗???

matrix_a = function(A) {A = matrix(data = 0, nrow = n, ncol = n) for (i in 1:n) {
for (j in 1:n) {
  if (i>=j) {A[i,j] = (i^2)} 
  if (i<j) {A[i,j] = (j^2)}
}} return(matrix_a)}

【问题讨论】:

  • n的值在哪里设置?
  • 我需要先指定n吗?
  • 是的。它从1 循环到n。如果你不设置n,谁来说它应该在哪里结束?
  • 您需要阅读有关如何编写函数的文档。你有几个问题(没有真正考虑函数内部的代码):你的函数将A作为参数,但你的函数的第一行重新定义了A...使用你没有定义的变量n .您的函数称为matrix_a,但最后您返回函数本身matrix_a....除此之外,现在考虑里面的代码,请看一下markus answer,它提供了一种替代方案,更有效和更多R方式。

标签: r matrix


【解决方案1】:

你可以的

n <- 3
mat <- matrix(nrow = n, ncol = n)
pmax(row(mat), col(mat)) ^ 2
#     [,1] [,2] [,3]
#[1,]    1    4    9
#[2,]    4    4    9
#[3,]    9    9    9

把它变成一个函数

f1 = function(n = 2) {
  mat <- matrix(nrow = n, ncol = n)
  pmax(row(mat), col(mat)) ^ 2
}

f1()
#     [,1] [,2]
#[1,]    1    4
#[2,]    4    4

第二个选项使用outer

f2 <- function(n = 3) {
  tmp <- (1:n)^2
  outer(tmp, tmp, pmax)
}

【讨论】:

    【解决方案2】:

    你快到了。您只需指定 n 并在最后返回正确的对象。

    matrix_a = function(n) {
        A = matrix(data = 0, nrow = n, ncol = n) 
        for (i in 1:n) {
            for (j in 1:n) {
                if (i>=j) {A[i,j] = (i^2)} 
                if (i<j) {A[i,j] = (j^2)}
            }
        } 
        A
    }
    
    matrix_a(3)
    #      [,1] [,2] [,3]
    # [1,]    1    4    9
    # [2,]    4    4    9
    # [3,]    9    9    9
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-11
      • 2017-12-14
      • 1970-01-01
      • 1970-01-01
      • 2014-09-18
      • 2014-07-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多