【问题标题】:How to change two sum to two for loops in R?如何在R中将两个总和更改为两个for循环?
【发布时间】:2021-08-11 11:55:57
【问题描述】:

已编辑:

我有一个名为y 的向量,其中包含n 数字元素和一个名为w 的矩阵n*n,其中其元素是数字。

y<-c(312,218,259,76,263) 

> w
     [,1] [,2] [,3] [,4] [,5]
[1,]    0    1    0    1    1
[2,]    1    0    1    1    1
[3,]    0    1    0    0    1
[4,]    1    1    0    0    0
[5,]    1    1    1    0    0

我想对上述数据使用以下公式: 我使用函数outersum 在R 中编写了以下代码:

dy<-y-mean(y)
M<-outer(dy,dy,"*")
a<-sum(w*M)
s0<-sum(w)
n<-length(y)
v<-n/sum(dy^2)
L<-v*a/s0

L 的输出是-0.1873

现在,我想将上面的代码更改为使用两个for 循环(不使用outersum)。实际上,我想使用两个for 循环而不是使用outersum 来创建公式,然后再次找到L 作为-0.1873

提前感谢您的帮助。

【问题讨论】:

    标签: r loops for-loop sum outer-join


    【解决方案1】:

    首先计算该公式的所有分子和分母,然后从中计算 I。

    这应该可以解决问题:

    ##Fraction: n1/d1 * n2/d2
    
    d1 = 0
    n1 = n
    d2 = 0
    n2 = 0
    my = mean(y)
    for(i in 1:n){
      d1 = d1 + (my-y[i])**2
      for(j in 1:n){
        n2 = n2+w[i,j]*(y[i]-my)*(y[j]-my)
        d2 = d2+w[i,j]
      }
    }
    
    I = n1/d1 * n2/d2
    

    【讨论】:

    • 您确定您的代码中有n2d2 吗?因为当我将您的代码用于我的数据时,n2d2I 的输出将是NA。 @MartinWettstein
    • 我在我的问题中添加了更多数据并在上面进行了编辑。请再看一遍。 @MartinWettstein
    • 对不起,那是我的错误。 w_ij 在 R 中是 w[i,j],而不是 w[i][j],正如我在答案中所写的那样。我纠正了它。现在,它可以工作了。
    猜你喜欢
    • 2017-04-20
    • 2020-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-15
    • 1970-01-01
    • 2011-06-21
    • 1970-01-01
    相关资源
    最近更新 更多