[問題] 跑迴圈時如何略過不存在資料繼續跑

看板R_Language作者 (海灘拖鞋)時間8年前 (2017/02/15 17:59), 編輯推噓0(003)
留言3則, 2人參與, 最新討論串1/1
問題類型:程式諮詢 學齡:這個寒假開始(約一個月) code: ### Step 0 ### #0.0 remove all previous data rm(list = ls()) #0.1 set home directory setwd("path") #0.2 check home directory getwd() #0.3 load packages ### Step 1 ### #1.0 set empty matrix results <- matrix(NA, 69, 31) #1.1 name rows rownames(results) <- c(paste("subj",rep(0:22, times = 1, each = 3),"_secc",rep(1:3,23),sep = "")) #1.2 name columes colnames(results) <- c(paste("ResProbI1", 1:8, sep = ""),paste("ACC", 1:4, sep = ""),"ACC1&8","ACC2&7","ACC3&6","ACC4&5",paste("RT", 1:8,sep = ""),"RT1&8","RT2&7","RT3&6","RT4&5","RTall","slope","threshold") ### Step 2 ### #2.0 loop for subject number for(sn in 0:22) for(s in 1) #sn for "subject number", s for "seccsion" { #2.1 import csv data #2.1.1 name csv "dn" dn <- paste("result_", sn,"-sess",s,".csv",sep = "") #2.1.2 load the csv to a list dt <- sapply(dn, read.csv) #2.1.3 convert list to a data frame dt <- data.frame(Reduce(cbind, dt)) #2.1.4cut unnecessary c dt <- dt[,1:14] #2.1.5 name rows #2.1.6 name colnames colnames(dt) <- c("subj", "Session", "Run", "Trial", "Respond", "Respond.time", "Confidence.rating", "Is.correct", "Fixation.time", "Interval1.contrast", "Interval2.contrast", "Target.interval", "Target.contrast", "Target.position") #2.2 response probability of I1 (situation 1 to 4) -> col 1 to 4 for(i in 1:4) { results[3*sn+s,5-i] <- 1-mean(dt[dt$Target.interval == 2 & dt$Target.contrast == i,]$Is.correct) #2.3 response probability of I1 (situation 5 to 8) -> col 5 to 8 results[3*sn+s,4+i] <- mean(dt[dt$Target.interval == 1 & dt$Target.contrast == i,]$Is.correct) #2.4 ACC of situation 1 to 4 -> col 9 to 12 results[3*sn+s,8+i] <- mean(dt[dt$Target.interval == 2 & dt$Target.contrast == i,]$Is.correct) #2.5 ACC of situation 1&8, 2&7, 3&6, 4&5 -> col 13 to 16 results[3*sn+s,17-i] <- mean(dt[dt$Target.contrast == i,]$Is.correct) #2.6 RT (situation 1 to 4) -> col 17 to 20 results[3*sn+s,21-i] <- mean(dt[dt$Target.interval == 2 & dt$Target.contrast == i & dt$Is.correct == 1,]$Respond.time) #2.7 RT (situation 5 to 8) -> col 21 to 24 results[3*sn+s,20+i] <- mean(dt[dt$Target.interval == 1 & dt$Target.contrast == i & dt$Is.correct == 1,]$Respond.time) #2.8 RT (situation 1&8, 2&7, 3&6, 4&5) -> col 25 to 28 results[3*sn+s,29-i] <- mean(dt[dt$Target.contrast == i & dt$Is.correct == 1,]$Respond.time) #2.9 RT (all) -> col 29 results[3*sn+s, 29] <- mean(dt[dt$Is.correct == 1,]$Respond.time) } } === 這是我寫的簡單code 就是實驗室的23個受試者(sn 0:22),理論上應該各做了三次實驗(s 1:3) 每次實驗都有產生一個csv檔 所以我想產生一個表格列出他們的描述統計 不過不是每個人都有做滿3次 所以在跑迴圈的時候 他說因為讀取不到後續的就不繼續跑了 上網稍微查一下好像可以使用if函數 不過研究不太出來所以想求救一下該怎麼做? -- Sent from my Windows -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.47.187.116 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1487152788.A.A89.html

02/15 19:39, , 1F
for(s in 1:3) {if(!file.exists(paste0("xx",s,".csv"))
02/15 19:39, 1F

02/15 19:40, , 2F
{break}}跳出s迴圈 如果是要繼續迴圈用next
02/15 19:40, 2F

02/18 00:04, , 3F
tryCatch可以跳過警告訊息
02/18 00:04, 3F
文章代碼(AID): #1Of2QKg9 (R_Language)
文章代碼(AID): #1Of2QKg9 (R_Language)