Я пытаюсь создать функцию, которая имеет сложение и вычитание векторов. Итак, я сделал следующее
Qhat <- function(x, groups,I,n,H){
Q4 <- array(0,dim=c(p,I))
p = dim(x)[2]
I=length(unique(groups));
for (i in 1:I){
for (j in 1:n[i]){
xobs<-x[groups==i]
n[i]<- length(xobs)
Q1 <- 1/((n[i]*(n[i]-1))*det(H^(1/2)))
sub <- t(sapply(1:nrow(xobs), function(x) if (x == 1) { xobs[x, ] - xobs[nrow(xobs), ] } else {xobs[x, ] - xobs[x-1, ]}))
add <- t(sapply(1:nrow(xobs), function(x) if (x == 1) { xobs[x, ] + xobs[nrow(xobs), ] } else {xobs[x, ] + xobs[x-1, ]}))
Q2 <- 1/2*add%*%(dmvnorm((sub)%*%(solve(H^(1/2)))))
Q3 <- matrix(c(sum(Q2[,1]), sum(Q2[,2])), nrow =1, ncol=p)
Q4 <- t(Q1[i]*Q3[i])
}
}
return (Q4)
}
, где я использую данные
H <- n[1]^(-1/(p+4))*solve(sigma^(1/2))
p <- 2
n<-c(20,20,20)
mu1=rep(1,p)
mu2=rep(1,p)
mu3=rep(1,p)
sigma <- matrix(c(1.0, 0,
0, 1.0), nrow = 2)
groups<-rep(1:3, n)
x1=mvrnorm(n[1], mu1,sigma)
x2=mvrnorm(n[2], mu2,sigma)
x3=mvrnorm(n[3], mu3,sigma)
x=rbind(x1,x2,x3)
Однако я получаю ошибку
Ошибка в 1: nrow (xobs) ): аргумент длины 0
Я не понимаю, почему у меня есть проблема в функции, хотя, когда я пытаюсь сделать то же самое с числами вне функции, она работает просто отлично.
Edit:
В основном я пытаюсь создать функцию, которая берет каждый вектор (строку) (2-мерный) в данных и вычитает / добавляет его из / к остальным векторам для каждой группы. Итак, в этом примере у меня есть 3 группы, и я хочу сделать что-то, что вычислило бы следующую функцию
![enter image description here](https://i.stack.imgur.com/wm94P.jpg)