有人知道执行“ 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)
答案 0 :(得分:0)
尝试一下:
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 :(得分:0)
请考虑通过创建以下函数来概括您的过程:1)读取文件,2)处理数据,3)输出到csv。然后让lapply
在所有Sys.glob
项中迭代调用已定义的方法,甚至返回已计算数据帧的列表。
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)