2013-06-08 4 views
1

R의 "for 루프"에 일련의 벡터 (행렬)의 열을 저장하는 데 문제가 있습니다. 실제로 일부 벡터 (행)의 평균을 계산하려고합니다. 행렬에. "for loop"를 실행하여 해당 벡터 (열)의 행에 대해 평균을 찾는 벡터 (열)를 찾습니다. 내가 "적용"기능을 사용하려고했지만 어딘가에서 "for 루프"를 실행하는 동안 이전 벡터 (열)를 저장하는 방법을 모르기 때문에 내가 가지고있는 것은 마지막 벡터 (열)입니다. 아무도 나에게 계몽 수 있습니까? 감사. 코드 위 `"for loop"에 일련의 벡터를 저장하십시오.

column.name<-colnames(loadfile) 
     for(i in 1:length(column.name)){ 
     char<- column.name[i] 
     tmp<-agrep("HW", char, ignore.case = TRUE, max.distance = 0.1) 
     if(length(tmp) > 0){ 
     print(column.name[i]) 
     x<-i 
     print(x) 
    } 
     loadfile$newcol<-apply(loadfile[x],1,mean) 
    } 

, LoadFile과 같은 지시어는 data.frame을 내가 HW 컬럼의 각 행의 평균을 저장하기위한 새 열을 만듭니다. 내 코드를 보여도 상관 없어요.

답변

3

재현 할 수없는 예제없이 도와 드릴 수 없습니다. 여기 내가 네가하고 싶은게있을 것 같아. agreprowMeans이 벡터화되기 때문에 벡터화 된 버전입니다.

tmp <- agrep("HW", column.name, ignore.case = TRUE, 
      max.distance = 0.1) 
loadfile$newcol <- rowMeans(loadfile[,tmp]) 

편집 나는 재현 예를 추가하고 매트릭스와 data.frame을 위해 잘 작동 :

mm <- matrix(1:25,ncol=5) 
colnames(mm) <- c(paste0('HW',1:3),paste0('NO',1:2)) 
loadfile <- as.data.frame(mm) 
column.name <- colnames(loadfile) 
tmp <- agrep("HW", column.name, ignore.case = TRUE, 
      max.distance = 0.1) 
loadfile$newcol <- rowMeans(loadfile[,tmp]) 
+2

+1 내가 같은 생각을했다,하지만 난 agrep'은'잊지 벡터화.

+0

Sir ... loadfile은 실제 행렬이 아닙니다. 미안하지만, 매트릭스를 언급했지만 data.frame입니다. 그래서 그것은 작동하지 않습니다 – user2462924

+0

@ user2462924'rowMeans (as.matrix (loadfile [, tmp]))' –

관련 문제