为了使用特定软件进行某些分析,我需要为每个参与者拥有单独的“ .dat”文件,每个文件都称为参与者编号,所有文件都保存在一个目录中。
我尝试使用R中的“ write.dat”函数(来自“ Multiplex”包)来执行此操作。
我编写了一个循环,为数据集中的每个参与者输出一个“ .dat”文件。我希望将输出的每个文件命名为参与者编号,并将它们都存储在同一文件夹中。
## Using write.dat
participants_ID <- unique(newdata$SJNB)
for (i in 1:length(participants_ID)) {
data_list[[i]] <- newdata %>%
filter(SJNB == participants_ID[i])
write.dat(data_list[[i]], paste0("/Filepath/Directory/", participants_ID[i], ".dat"))
}
## Using write_csv this works perfectly:
participants_ID <- unique(newdata$SJNB)
for (i in 1:length(participants_ID)) {
newdata %>%
filter(SJNB == participants_ID[i]) %>%
write_csv(paste0("/Filepath/Directory/", participants_ID[i], ".csv"), append = FALSE)
}
如果我使用功能“ write_csv”,则可以完美地工作(为每个参与者保存.csv文件)。但是,如果我使用函数“ write.dat”,则每个参与者文件都保存在一个单独的文件夹中-文件夹名称是参与者编号,并且该文件夹中的文件称为“ data_list [[i]]”。为了将所有data_list文件放入同一目录,我必须将它们重命名,这很耗时。
理论上,我可以将文件输出到.csv,然后将其转换为.dat,但是我很想知道是否可以做些什么来使write.dat函数以我尝试的方式工作它:)
答案 0 :(得分:0)
write.dat
上的文档很小,但是似乎您混淆了目录 path 和文件名。您已经故意创建了一个名为“ /Filepath/Directory/[participants_ID[i]].dat”的目录,并且在该目录中放置了每个输出文件。您无法为x.dat
文件本身添加名称,这似乎是所提供软件包中的缺陷。
但是,并非全部丢失。在循环内,将write.dat
行替换为以下行或类似的行(未经测试):
我觉得有一个更平滑的解决方案,尽管使用了可怕的eval
:
再次在循环内部,(假设participants_ID[i]
是一个字符字符串)
eval(paste0(participants_ID[i],'<- dataList[[i]]'))
write.dat(participants_ID[i], "/Filepath/Directory/")
write.dat(data_list[[i]], "/Filepath/Directory/")
thecommand = paste0('mv /Filepath/Directory/dataList[[i]] /Filepath/Directory/',[participants_ID[i]],'.dat',collapse="")
system(thecommand)