为矩阵的每一行应用一个函数

时间:2016-05-01 00:15:09

标签: r

我想计算一个速率,它表示所有值中的负值数量,我想在给定矩阵的每一行中应用它。

    func1<-function(N){
 alpha1 = 8.439e-02
 beta1 = 8.352e-01
 mu = 7.483e-03 
 omega = 1.343e-04
 X_0 = -3.092031e-02
 sigma_0 = 0.03573968
 eps = rt (N,7.433e+00)
 # loops
 Xn= numeric (N)
 sigma= numeric (N)
 sigma[1] = sigma_0
 Xn[1] = X_0
 for (t in 2:N){
 sigma[t] = sqrt (omega + alpha1 * (Xn[t-1])^2 + beta1* (sigma[t-1])^2)
 Xn[t] = sigma[t] * eps[t]
 }
 A = mu + Xn
 return(A)
 }
 M<-replicate(1000,func1(420))
 M2<-t(M)

    func<-function(x){
     count<-as.numeric()
     count[1]=0
  for(i in 1:420){
    if(x[i]<0){
      count[i+1]=count[i]+1
    }
    else{count[i+1]=count[i]
    }
  }
  return(count)

x<-as.vector(x)
 count<-func(x)
  finalcount<-count[421]
  rate<-finalcount/420
}
apply(M2,1,func)

M2是我想要使用的矩阵,X表示行替换为函数

1 个答案:

答案 0 :(得分:0)

以下是实现目标的方法:

我们假设你创建一个矩阵如下:

m <- matrix(-9:10, nrow = 5)
m

     [,1] [,2] [,3] [,4]
[1,]   -9   -4    1    6
[2,]   -8   -3    2    7
[3,]   -7   -2    3    8
[4,]   -6   -1    4    9
[5,]   -5    0    5   10

除了最后一行,每行有两个负数。

每行负数的比例可按如下方式计算:

rowMeans(m < 0)
[1] 0.50 0.50 0.50 0.50 0.25

如果您愿意,可以使用apply,如下所示,但循环遍历每一行:

apply(m, 1, function(x) sum(x < 0)  / length(x))
[1] 0.50 0.50 0.50 0.50 0.25