Изначально у меня есть следующий код

path="M:/MainFiles/"
Index="Columbus"
write.csv(data,paste(paste(paste(path,Index, sep = ""), Sys.Date(), sep = "_" ), ".csv", sep = ""))

Этот файл сохраняется в "M:/MainFiles/Columbus_2021-01-21.csv"

Я хочу, чтобы файл сохранялся в "M:/MainFiles/2021-01-21/Columbus_2021-01-21.csv" , где 2021-01-21 - Sys.date(). В результате каждый раз создается новая папка, и файл сохраняется в этой папке.

r
0
Erko Tru 21 Янв 2021 в 14:29

2 ответа

Лучший ответ

Вы можете использовать file.path для создания пути / имен файлов независимо от ОС и dir.create для создания нового каталога, если он еще не существует.

path <- "M:/MainFiles"
Index <- "Columbus"

newday <- file.path(path, Sys.Date())
newday
#[1] "M:/MainFiles/2021-01-21"

if(!dir.exists(newday)){
  dir.create(newday)
}
filename <- paste0(paste(Index, Sys.Date(), sep = "_"), ".csv")
filename <- file.path(newday, filename)
filename
#[1] "M:/MainFiles/2021-01-21/Columbus_2021-01-21.csv"

Это можно записать как функцию.

newDayCreate <- function(path, index){
  newdir <- file.path(path, Sys.Date())
  yes <- dir.create(newdir)
  filename <- paste0(paste(index, Sys.Date(), sep = "_"), ".csv")
  filename <- file.path(newdir, filename)
  list(dir.create = yes, 
       newdir = newdir, 
       filename = filename)
}

newDayCreate("~/tmp", Index)
#$dir.create
#[1] TRUE
#
#$newdir
#[1] "~/tmp/2021-01-21"
#
#$filename
#[1] "~/tmp/2021-01-21/Columbus_2021-01-21.csv"

Обратите внимание, что новый каталог был создан, но файл не был записан на диск. Значение функции должно быть присвоено переменной, а член списка filename должен использоваться в write.csv:

res <- newDayCreate("~/tmp", Index)
#Warning message:  
#In dir.create(newdir) : '/<omited>/tmp/2021-01-21' already exists

В предупреждении говорится, что я ранее создал каталог (в предыдущей инструкции выше).
Теперь посмотрим, что находится в res:

res
#$dir.create
#[1] FALSE
#
#$newdir
#[1] "~/tmp/2021-01-21"
#
#$filename
#[1] "~/tmp/2021-01-21/Columbus_2021-01-21.csv"

Результатом res$dir.create будет FALSE. Чтобы записать файл на диск, используйте

write.csv(data, res$filename)
1
Rui Barradas 21 Янв 2021 в 11:54

Попробуй это.

path <- "M:/MainFiles/"
FROMDATE <- sys.date()
dir.create(paste0(path,FROMDATE,sep = ""))
qq <- paste0(path,FROMDATE) 
setwd(qq)
write.csv(data,'data.csv',rows.name=F)

1
Dharman 21 Янв 2021 в 11:42