여기에 함축적 인 방법으로 여러 가지 문제가 있습니다. 첫째, 재현의 예를 확인하는 데 도움이 : 당신이에 대한 루프를 사용하려는 경우
original.matrix <- matrix(1:(320*25), nrow=320, ncol=25)
둘째, 당신은 결과를 유지하기 위해 객체를 초기화해야합니다
helping.matrix <- matrix(nrow=64, ncol=25)
확인을, 이제 코드를 살펴 보겠습니다.
for (x in c(1:64)){
helping.matrix[x,] = colSums(original.matrix[((5*(x-1)+1):5*x),])/
여기의 색인 표현은 꽤 야생이며 원하는 것을 수행하지 않습니다. 예를 들어, x = 2 인 경우 (5*(x-1)+1):5*x
= 12, 10. 이는 명시된 목표와 일치하지 않습니다. x = 9에서 expression은 original.matrix의 행 수보다 큰 값을 반환하기 때문에 "범위를 벗어났습니다"라는 오류가 발생합니다. 우리가 데이터 개체 인 것처럼 당신이 인덱스 vector
하려고하는 다음
vector[((5*(x-1)+1):5*x)])
에 도착하면 다음 문제가 occures. 그러나 벡터는 데이터 객체가 아니라 함수입니다. 어쩌면 c((5*(x-1)+1):5*x)
을 원 하시겠습니까? 어쨌든이 섹슨 코드가 의도하는 바가 정확히 무엇인지 명확하지 않으므로 여기서 제안을 많이 제공 할 수는 없습니다.
좋아, 이제 시작하자. 오버 반복하는 루프 또는 적용 - 가족 기능을 사용
groups <- rep(1:(320/5), each=5)
다음 :이 문제에 접근 할 방법은 당신이 당신의 합산 기능을 적용 할 그룹에 매핑하는 인덱스 벡터를 만드는 것입니다 여러 떼. 에 대한 루프 방식은
helping.matrix <- matrix(nrow=64, ncol=25)
for(i in unique(groups)) {
helping.matrix[i,] <- colSums(original.matrix[groups == i,])
}
처럼 보일 것이다 나는 "특정 벡터에 의해 표준화"에 예상되는 부분을 왼쪽으로 한
helping.matrix <- Reduce(rbind, by(original.matrix, groups, colSums))
같이 적용 기반의 접근 방식이 보일 것이다 실제로 일어날 일이 무엇인지 분명하지 않기 때문입니다.
원래 생각했던 것보다 간단합니다! – DonC