[英]how to use “for loop” to write multiple .csv file names?
有誰知道執行“ for循環”的最佳方法,該方式將讀取不同的主題ID並將其附加到導出的CSV的名稱中?
例如,我有一個心電圖軟件程序的多個輸出文件(每個文件屬於一個人)。 這些文件名為C800_HR.bdf.evt,C801_HR.bdf.evt,C802_HR.bdf.evt等。每個文件都被讀入r,然后應用了腳本來計算心率變異性。 在腳本的末尾,我需要添加一個循環,該循環將提取主題ID(例如C800,C801,C802),並為每個人寫一個新的文件名,以使其變為C800_RtoR.csv。 本質上,每次讀入和導出文件名時,我都希望避免更改語法。
我目前正在使用以下語法讀取多個文件:
>setwd("/Users/kmpc/Downloads")
>myhrvdata <-lapply(Sys.glob("C8**_HR.bdf.evt"), read.delim)
試試看:
cardio_files <- list.files(pattern = "C8\\d{2}_HR.bdf.evt")
subject_ids <- sub("^(C8\\d{2})_.*", "\\1" cardio_files)
myList <- lapply(cardio_files, read.delim)
## do calculations on the list
for (i in names(myList)) {
write.csv(myList[[i]], paste0(subject_ids[i], "_RtoR.csv"))
}
唯一的事情是,您在計算時必須使用列表。 您可以將它們組合到單個data.frame中,但是最好將其保留為列表以末尾寫入文件。
考慮通過創建以下函數來概括您的流程:1)讀取文件,2)處理數據,3)輸出到csv。 然后,對所有Sys.glob
項反復應用lapply
調用已定義的方法,甚至返回已計算數據幀的列表。
proc_heart_rate <- function(f_name) {
# READ IN .evt FILE INTO df
df <- read.delim(f_name)
# CALCULATE HEART RATE VARIABILITY WITH df
...
# OUTPUT df TO CSV
subject_id <- gsub("\\_.*", "", f_name)
write.csv(df, paste0(subject_id, "_RtoR.csv"))
# RETURN df FOR OTHER USES
return(df)
}
# LIST OF DATA FRAMES WITH CALCULATIONS
myhrvdata_list <-lapply(Sys.glob("C8**_HR.bdf.evt"), proc_heart_rate)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.