2012-02-28 9 views
1

행렬이 6 행입니다. 그 열 내가 번 복제 할 수 있지만 각 값을 무작위로 변경하고 각 반복 후 평균 및 모든 열의 분산을 계산할 싶습니다. 예를 들어행의 끝에 열을 복제하십시오.

:

values = rnorm(6, 6, 1); matrix1 = matrix(values, 6) 

I = 1과 같을 것이다 후 :

: 끝에

values2 = values 
values2[sample(1:6, 1)] = values2[sample(1:6, 1)]+runif(1, 0, 1) 
matrix2 = matrix(c(values, values2), 6) 

, I 출력 그렇게 보이는 데이터 프레임을 싶습니다

i mean var 
1 1.23 2.31 
2 1.24 2.33 etc... 

많은 경우 i 's입니다. 루프를 사용하여이 작업을 수행 할 수있는 방법이 있다고 상상해보십시오. 그러나 기술을 이해할 수있는 것은 아닙니다. 모든 도움을 주셔서 감사합니다!

답변

2

당신이 이것을하고있는 횟수를 알고 있다면, 특히 내가 큰 경우 미리 최종 매트릭스를 구성하는 것이 가장 좋습니다. 그러나이없이 :

jitter.func <- function(x, vec) { 
    cell <- sample(1:length(vec), 1) 
    vec[cell] <- vec[cell] + runif(1, 0, 1) 

    return(c(mean=mean(vec), var=var(vec))) 
} 


i <- 10 
sapply(1:i, jitter.func, vec=values) 
+0

이 잘 작동합니다. 고마워요.하지만 아마도 제 발자국을 간소화하여 발에서 몸을 쐈습니다. mean과 var 대신에 사용하고있는 함수는 열 이름이 다르다는 것을 요구합니다. 나는 반복문 i에 기초하여 colnames에 라벨을 붙이고 싶다. 나는이 함수를 다음 함수에 추가했다 : colnames (vec) = paste ("col", 1 : length (vec), sep = ""). 그러나 나는 dimnames가 배열 확장과 같지 않다는 오류에 빠져 들었다. 내가 어디로 잘못 가고 있니? – jslefche

+0

신경 쓰지 마세요. 다시 한 번 감사드립니다! – jslefche

0
j <- 20 # Number of columns 
i <- 6 # Number of rows 
vec <- matrix(rnorm(i,6,1),ncol=j,nrow=i)# vector replicated j times 
idx <- sample(seq(i),j,replace=TRUE) # j random rows 
vec[cbind(idx, seq(j))] <- vec[cbind(idx, seq(j))]+runif(j) # add random number to random row in each column 
apply(vec,2,plyr::each(mean,var)) # summary statistics 
관련 문제