2016-06-01 3 views
-1

여러 번 적용해야하는 코드를 작성 중입니다. 나는 많은 것을 이미 기능에 정돈 해 놓았습니다. 그러나 나는 여전히 예를 들어, code(1), code(2), code(3) 등의 긴 목록으로 끝납니다.반복 기능 (또는 이와 유사)

시퀀스 명령과 루프를 사용하여 시도했지만 (나쁘지 만) 결국에는 포기해야했습니다. 이 코드를 반복해서 정리할 방법이 있습니까? (필요한 경우 모든 수정 된 기능을 붙여 넣을 수 있지만 관련성이 없어야합니다 (희망 사항)). 고맙습니다!

library(leaps) 
library(grid) 
library(gridBase) 

source("J:/R/Functions/function_leapsSummary.R") 
source("J:/R/Functions/function_plotregsubsetsMOD.R") 

nbestfunc <- function(D, E, G){ 
    regsubsets(D~., 
      data=E, 
      nbest=G) 
} 

setwd("J:/Academic papers/Dissertation journal paper/Version 3/New analysis/R code/Full data/SpringLIFE-ChalkRiver") 

SpringLIFEChalkRiver <- read.csv("SpringLIFE-ChalkRiver.csv",header=T) 
attach(SpringLIFEChalkRiver) 

SPR_Q_PCA <- SpringLIFEChalkRiver[,c(3, 7, 12, 14, 16, 18)] 

setwd("J:/R/Leaps") 

##nbest 
nb1 <- nbestfunc(SpringChalkLife, SPR_Q_PCA, G = 1) 
nb2 <- nbestfunc(SpringChalkLife, SPR_Q_PCA, G = 2) 
nb3 <- nbestfunc(SpringChalkLife, SPR_Q_PCA, G = 3) 
nb4 <- nbestfunc(SpringChalkLife, SPR_Q_PCA, G = 4) 
nb5 <- nbestfunc(SpringChalkLife, SPR_Q_PCA, G = 5) 
nb6 <- nbestfunc(SpringChalkLife, SPR_Q_PCA, G = 6) 
nb7 <- nbestfunc(SpringChalkLife, SPR_Q_PCA, G = 7) 
nb8 <- nbestfunc(SpringChalkLife, SPR_Q_PCA, G = 8) 
nb9 <- nbestfunc(SpringChalkLife, SPR_Q_PCA, G = 9) 
nb10 <- nbestfunc(SpringChalkLife, SPR_Q_PCA, G = 10) 

##df from captions and file names 
NAMES <- cbind(c(
    "Spring_VPCA_nbest=1", 
    "Spring_VPCA_nbest=2", 
    "Spring_VPCA_nbest=3", 
    "Spring_VPCA_nbest=4", 
    "Spring_VPCA_nbest=5", 
    "Spring_VPCA_nbest=6", 
    "Spring_VPCA_nbest=7", 
    "Spring_VPCA_nbest=8", 
    "Spring_VPCA_nbest=9", 
    "Spring_VPCA_nbest=10"), 
    c(
    "J:/R/Leaps/Spring_VPCA_nbest=1.png", 
    "J:/R/Leaps/Spring_VPCA_nbest=2.png", 
    "J:/R/Leaps/Spring_VPCA_nbest=3.png", 
    "J:/R/Leaps/Spring_VPCA_nbest=4.png", 
    "J:/R/Leaps/Spring_VPCA_nbest=5.png", 
    "J:/R/Leaps/Spring_VPCA_nbest=6.png", 
    "J:/R/Leaps/Spring_VPCA_nbest=7.png", 
    "J:/R/Leaps/Spring_VPCA_nbest=8.png", 
    "J:/R/Leaps/Spring_VPCA_nbest=9.png", 
    "J:/R/Leaps/Spring_VPCA_nbest=10.png")) 

##calling function for each 
leapsSummary(nb1, B = NAMES[1,1], C = NAMES[1,2]) 
dev.off() 
leapsSummary(nb2, B = NAMES[2,1], C = NAMES[2,2]) 
dev.off() 
leapsSummary(nb3, B = NAMES[3,1], C = NAMES[3,2]) 
dev.off() 
leapsSummary(nb4, B = NAMES[4,1], C = NAMES[4,2]) 
dev.off() 
leapsSummary(nb5, B = NAMES[5,1], C = NAMES[5,2]) 
dev.off() 
leapsSummary(nb6, B = NAMES[6,1], C = NAMES[6,2]) 
dev.off() 
leapsSummary(nb7, B = NAMES[7,1], C = NAMES[7,2]) 
dev.off() 
leapsSummary(nb8, B = NAMES[8,1], C = NAMES[8,2]) 
dev.off() 
leapsSummary(nb9, B = NAMES[9,1], C = NAMES[9,2]) 
dev.off() 
leapsSummary(nb10, B = NAMES[10,1], C = NAMES[10,2]) 
# STR (sum_list)로부터

출력

List of 10 

$ : Named int 2 
    ..- attr(*, "names")= chr "RStudioGD" 
$ : Named int 2 
    ..- attr(*, "names")= chr "RStudioGD" 
$ : Named int 2 
    ..- attr(*, "names")= chr "RStudioGD" 
$ : Named int 2 
    ..- attr(*, "names")= chr "RStudioGD" 
$ : Named int 2 
    ..- attr(*, "names")= chr "RStudioGD" 
$ : Named int 2 
    ..- attr(*, "names")= chr "RStudioGD" 
$ : Named int 2 
    ..- attr(*, "names")= chr "RStudioGD" 
$ : Named int 2 
    ..- attr(*, "names")= chr "RStudioGD" 
$ : Named int 2 
    ..- attr(*, "names")= chr "RStudioGD" 
$ : Named int 2 
    ..- attr(*, "names")= chr "RStudioGD" 

답변

1

붙여 넣기 또는 paste0는 이름 부분에 당신에게 많은 도움이 될 것이다 : 나는 확신하면서 더 나은이 그래서 내가 처음 파이썬을 시작

NAMES <- data.frame(paste0("Spring_VPCA_nbest=", 1:10), 
       paste0("J:/R/Leaps/Spring_VPCA_nbest=", 1:10, ".png")) 

그래서 난 당연히 내가 R. 위해 할 것보다 더 루프를 사용 당신이 조금 될 수 있도록 두 번째 루프와 같은 길이() 또는 고유() 호출을 대체 할 수 있다면 실제로

   nb_list <- list() 
       for (i in 1:10) { 
        nb <- nbestfunc(SpringChalkLife, SPR_Q_PCA, G = i) 
        nb_list[[i]] <- nb 
       } 

       sum_list <- list() 
       for (i in 1:length(nb_list)) { 
        ls <- leapsSummary(nb_list[[i]], B = NAMES[i,1], C = NAMES[i, 2]) 
        sum_list[[i]] <- ls 
        dev.off() 
       } 

       lapply(sum_list, print) 

이 훨씬 더 : lapply 또는 유사한 여기에 사용하는 방법은 내가 할 것 인 것이다 방어력을 높이고 계산을 컴퓨터에 맡기십시오.

+0

감사합니다. 나는 확실히 그것을 생각해 낼 수 없었다. 루프를 가진 나의 능력은 아직도 조금은 iffy이다. 불행히도 여전히 제대로 작동하지 않습니다. 코드는 훌륭하게 전송되지만 알 수없는 이유로 이미지를 실제로 생성하지는 않습니다. @Imo가 제공 한 것과 동일한 문제가 있습니다. – Visser

+0

for 루프를 사용하면 for (i in : length (sum_list)) {print (sum_list [[i]])}'에 도움이 될 수 있습니다. 만약 당신이 내게 아마도 str (sum_list) 출력을 얻고 있고 더 많은 도움을 줄 수있는 오류 메시지를주고 싶습니다. – Nate

+0

불행히도 그것은 도움이되지 않습니다. 이전처럼 똑같은 결과가납니다. 게시물에 str (sum_list)에 출력을 추가 하겠지만, 얼마나 유용한 지 모르겠습니다. (출력물은 RStudio에 있지만, 보통 R에서도 시도해 봤는데, 똑같은 것을 넣는다.) – Visser

0

한 가지 제안 대신 별도의 개체 이름 목록에서 NB # 1 (S)를 저장한다.

nbList <- lapply(1:10, function(i) nbestfunc(SpringChalkLife, SPR_Q_PCA, G = i)) 
# give list items same names as before 
names(nbList) <- paste0("nb", 1:10) 

같은 뭔가 그럼 당신은 아주 쉽게 for 루프에 나머지를 팝업 할 수

for(i in seq_len(10)) { 
    leapsSummary(nbList[[i]], B = paste("Spring_VPCA_nbest=",i), 
       C = paste0("J:/R/Leaps/Spring_VPCA_nbest=, i, .png")) 
    dev.off() 
} 

또한 오히려 nbList[[paste0("nb",i)]] 같은 루프 내에서 자신의 위치보다는 nbList 이름을 참조 할 수있다.