【问题标题】:For loop in R not working as expectedR中的for循环没有按预期工作
【发布时间】:2017-11-30 11:08:40
【问题描述】:

我需要在 R 程序中编写以下内容:

X[,1] = (C[1,1]*Y[,1])+(C[1,2]*Y[,2])+(C[1,3]*Y[,3]) + mu[1] 
X[,2] = (C[2,1]*Y[,1])+(C[2,2]*Y[,2])+(C[2,3]*Y[,3]) + mu[2]
X[,3] = (C[3,1]*Y[,1])+(C[3,2]*Y[,2])+(C[3,3]*Y[,3]) + mu[3]

我正在写以下内容:

for (i in 1:3){
   for (j in 1:3) {
       X[,i] = sum((C[i,j]*Y[,j]))+ mu[i] 
   }
}

但答案与上面写的不一样。有人可以帮忙吗?

【问题讨论】:

  • 您能提供dput() 的数据吗?

标签: r loops for-loop matrix


【解决方案1】:

在您的计算中不需要 for 循环。 假设您的数据是这样的:

set.seed(1)
C = matrix(1:9, nrow = 3, ncol = 3)
C
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9

Y = 1:3
mu = rnorm(3)
mu
[1] -0.6264538  0.1836433 -0.8356286

那么你可以简单地写:

X = C%*%Y + mu
X
         [,1]
[1,] 29.37355
[2,] 36.18364
[3,] 41.16437

使用您的for-loop,您实际上将X[i] 计算为C[i,3]*Y[,3]+ mu[i],因为您在每个j 循环中重写了X[i] 的值。

如果你坚持使用for循环解决方案,只使用一个for循环:

for (i in 1:3){
  X[i] <- sum(C[i, 1:3]*Y) + mu[i]
}
X
         [,1]
[1,] 29.37355
[2,] 36.18364
[3,] 41.16437

另外,如果Y也是矩阵,你可以试试这个:

set.seed(1)
C = matrix(1:9, nrow = 3, ncol = 3)
Y = matrix(1:9, nrow = 3, ncol = 3)
mu = rnorm(3)

X = C%*%Y + mu

X <- matrix(0, nrow = 3, ncol = 3)
for (i in 1:3){
  for (j in 1:3){
    X[i, j] <- sum(C[i, ]*Y[, j]) + mu[i]
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-29
    • 2019-08-30
    • 2020-12-27
    • 2011-05-04
    相关资源
    最近更新 更多