Почему «write.dat» (R) сохраняет файлы данных в папках? - PullRequest
0 голосов
/ 10 мая 2019

Для проведения некоторого анализа с использованием определенного программного обеспечения мне необходимо иметь отдельные файлы ".dat" для каждого участника, каждый из которых называется номером участника, и все они сохраняются в одном каталоге.

Я пытался сделать это, используя функцию write.dat в R (из пакета '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 работала так, как я пытаюсь это :)

1 Ответ

0 голосов
/ 10 мая 2019

Документация по write.dat является минимальной, но может показаться, что вы перепутали каталог путь с именем файла .Вы преднамеренно создали каталог с именем "/Filepath/Directory/[participants_ID[i]].dat", и именно там находится каждый выходной файл.То, что вы не можете присвоить имя самому файлу x.dat, похоже, является дефектом в поставляемом пакете.

Однако не все потеряно.Внутри вашего цикла замените строку write.dat на следующие строки или что-то похожее (не проверено):

edit

Мне кажется, что есть более плавное решение, хотя и с использованием страшных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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...