>

R에서 첫 번째 for 루프를 작성하려고합니다. 루프는 종 목록을 읽고 각 종의 AUC 및 Kappa 값을 확인한 다음 .csv 파일의 데이터를 작성해야합니다.

현재 코드의 Kappa 부분을 생략했습니다. 코드는 정상적으로 실행되지만 csv 파일로 얻는 출력은 내 목록의 마지막 종이며 해당 AUC는 15 번 반복되었습니다.

print (i)와 print (AUC)를 실행하는 대신 각 종과 해당 AUC의 목록을 얻습니다. 왜 print 를 이해하지 못합니다  그리고 write.csv  나에게 같은 결과를주지 않습니다.

setwd("Y:/HModel/Maxent/MaxentOutputs/allspp 11-28")
splist <-c( "pomatomus_saltatrix",
            "stenotomus_chrysops",
            "illex_illecebrosus",
            "lophius_americanus",
            "squalus_acanthias",
            "scophthalmus_aquosus",
            "paralichthys_dentatus",
            "helicolenus_dactylopterus",
            "merluccius_albidus",
            "merluccius_bilinearis",
            "urophycis_chuss",
            "cynoscion_regalis",
            "pollachius_virens",
            "urophycis_tenuis",
            "tautogolabrus_adspersus")
n = rep(NA, length(splist))
AUCandKAPPA = data.frame(sppocean=n, AUC=n, stringsAsFactors=FALSE)
for (i in splist) {
  presence_csv <- paste(i,"0", "samplePredictions.csv", sep = "_")
  background_csv <- paste(i, "0", "backgroundPredictions.csv", sep = "_")
  presence <- read.csv(presence_csv)
  background <- read.csv(background_csv)
  pp <- presence$Logistic.prediction # get the column of predictions
  testpp <- pp[presence$Test.or.train=="test"] # select only test points
  trainpp <- pp[presence$Test.or.train=="train"] # select only test points
  bb <- background$Logistic
  combined <- c(testpp, bb) # combine into a single vector
  label <- c(rep(1,length(testpp)),rep(0,length(bb))) # labels: 1=present, 0=random
  pred <- prediction(combined, label) # labeled predictions
  perf <- performance(pred, "tpr", "fpr") # True / false positives, for ROC curve
  AUC <-performance(pred, "auc")@y.values[[1]] # Calculate the AUC
  # fill in diagnostics
  AUCandKAPPA$sppocean = i 
  AUCandKAPPA$AUC = AUC
  print(i)
  print(AUC)
  # write AUC and kappa to excel file
  write.csv(AUCandKAPPA, file="kappa_sp1-28.csv")
}

다음 줄을 바꾸려고했지만 오류가 발생합니다

# fill in diagnostics
  AUCandKAPPA$sppocean[i] = i
  AUCandKAPPA$AUC[i] = AUC
Error in `$<-.data.frame`(`*tmp*`, "sppocean", value = c("15", "pomatomus_saltatrix" : 
  replacement has 2 rows, data has 1


  • 답변 # 1

    변경을 시도하는 것은 올바른 방향으로 한 단계입니다. 루프가 반복 할 때마다 결과를 덮어 쓰고 있음을 알았습니다. 그러나 splist 의 문자열을 통해 루프를 제어하고 있기 때문에 , 데이터 프레임 AUCandKappa 를 색인 할 수 없습니다   i 를 사용하여 . 아마도 숫자 인덱스로 루프를 제어 할 수도 있습니다 :

    for(i in 1:length(splist)) {}
    
    

    splist 의 문자에 의존하는 코드 조정   i 에 배정  그것이 splist 에서 추출되도록   splist[i] 를 통해 .

    결과를 ​​표에 할당하십시오 :

    # fill in diagnostics
    AUCandKAPPA[i, "sppocean"] <- splist[i]
    AUCandKAPPA[i, "AUC"] <- AUC
    
    

관련 자료

  • 이전 c - Getc는 \ n 문자를 다시 읽습니다
  • 다음 mysql - centos mysqld와 httpd가 동시에 작동하지 않습니다