C_River
C_River

Reputation: 11

Why does "write.dat" (R) save data files within folders?

In order to conduct some analysis using a particular software, I am required to have separate ".dat" files for each participant, with each file named as the participant number, all saved in one directory.

I have tried to do this using the "write.dat" function in R (from the 'multiplex' package).

I have written a loop that outputs a ".dat" file for each participant in a dataset. I would like each file that is outputted to be named the participant number, and for them all to be stored in the same folder.

## 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)
}

If I use the function "write_csv", this works perfectly (saving .csv files for each participant). However, if I use the function "write.dat" each participant file is saved inside a separate folder - the folder name is the participant number, and the file inside the folder is called "data_list[[i]]". In order to get all of the data_list files into the same directory, I then have to rename them which is time consuming.

I could theoretically output the files to .csv and then convert them to .dat, but I'm just intrigued to know if there's anything I could do differently to get the write.dat function to work the way I'm trying it :)

Upvotes: 0

Views: 584

Answers (1)

Carl Witthoft
Carl Witthoft

Reputation: 21492

The documentation on write.dat is subminimal, but it would appear that you have confused a directory path with a file name . You have deliberately created a directory named "/Filepath/Directory/[participants_ID[i]].dat" and that's where each output file is placed. That you cannot assing a name to the x.dat file itself appears to be a defect in the package as supplied.

However, not all is lost. Inside your loop, replace your write.dat line with the following lines, or something similar (not tested):

edit

It occurs to me that there's a smoother solution, albeit using the dreaded eval: Again inside the loop, (assuming participants_ID[i] is a char string)

eval(paste0(participants_ID[i],'<- dataList[[i]]'))
write.dat(participants_ID[i], "/Filepath/Directory/")

previous answer

write.dat(data_list[[i]], "/Filepath/Directory/")
thecommand = paste0('mv /Filepath/Directory/dataList[[i]]  /Filepath/Directory/',[participants_ID[i]],'.dat',collapse="")
system(thecommand)

Upvotes: 1

Related Questions