Создавайте одинаковые папки в разных подкаталогах в R

Я пытаюсь создать одни и те же папки в нескольких подкаталогах в R. Я думал, что смогу сделать это с помощью цикла for, но все пошло не так, как планировалось.

Моя структура папок выглядит так: Главный каталог/Weather_day. Weather_day содержит папки D0 и D1. Я хочу создать папки погоды и температуры как в D0, так и в D1.

Он пытался сделать это с помощью цикла for

pathway = "./Weather_day"
for (i in pathway){
    setwd(i)
    dir.create("weather")
    dir.create("temperature")
}

Однако результатом этого является то, что он создает папки в папке основного каталога. Кроме того, я не могу запускать этот код дважды или более, потому что он меняет рабочий каталог.

Любые решения для этого? заранее спасибо


person alexdegrote1995    schedule 27.03.2021    source источник
comment
Откуда взялась функция create.dir? Это имя пакета?   -  person Peace Wang    schedule 27.03.2021
comment
Сделал ошибку в написании кода здесь. Предполагается, что это dir.create(), который, насколько мне известно, является частью стандартных функций R.   -  person alexdegrote1995    schedule 27.03.2021
comment
Меня немного смущают имена папок D0 и D1 и названия в коде с погодой и температурой. Вы можете это объяснить?   -  person Albin    schedule 27.03.2021
comment
@Альбин конечно. Таким образом, D0 и D1 обозначают, в какой день проводятся измерения. Это отдельные папки. Что я хочу сделать, так это создать в обеих папках новые подкаталоги, которые называются температура (куда я буду помещать файлы с температурой дня) и погода (куда я буду помещать файлы, которые говорят, идет ли дождь, солнце, снег так далее.). Я просто хочу иметь код R, который создает это для меня. Поскольку я не знаю, сколько папок (день 0, пока я не знаю, когда), я хочу создать цикл for, который создает эти папки, не учитывая длину количества папок.   -  person alexdegrote1995    schedule 27.03.2021


Ответы (2)


Я предлагаю, чтобы папка Weather_day уже была создана. Согласно вашему комментарию, мое предложение заключается в следующем.

Кроме того, функция также обеспечивает дополнительное использование, например, если в будущем у вас будет дополнительная папка, вы можете просто добавить ее с помощью этой функции.

wd = getwd()

pathway = paste0(wd,"/Weather_day/")

dir.create(pathway)
    
create_dir = function (x) {
  for (i in x){
    if(!dir.exists(paste0(pathway, i))){dir.create(paste0(pathway, i))}
  }}


create_dir(c("weather","temperature"))

Я проверил код, и с помощью оператора if вы предотвращаете перезапись существующих папок, что я настоятельно рекомендую. Но это зависит от варианта использования.

Изменить

Что касается вашего комментария, я скорректировал свое предложение. Я не уверен, что это именно то, что вы ищете:

pathway = paste0(getwd(),"/Weather_day/")

d = c("D0","D1")
x = c("weather", "temperature")

create_dir = function (d, x) {
  for (i in d){
    if(!dir.exists(paste0(pathway, i))){dir.create(paste0(pathway, i))}
  for (j in x){
    if(!dir.exists(paste0(pathway, i, "/", j))){dir.create(paste0(pathway, i, "/", j))}
  }}}

create_dir(d,x)

С помощью приведенного выше кода вы получаете каждую из папок погоды и температуры в папках D0 и D1.

person Albin    schedule 27.03.2021
comment
Я попробовал этот код, но он создает новую папку с именем Weather_day в главном каталоге и помещает туда новые папки погоды и температуры. Однако у меня уже есть папка Weather_day, и в ней прямо сейчас есть подкаталоги Day 0 и Day1. Я хочу создать папки погоды и температуры в обоих этих подкаталогах, то есть в D0 и D1. - person alexdegrote1995; 28.03.2021
comment
Я также попытался отредактировать часть кода, удалив создание getwd() и используя путь, как я его ранее создал, но тогда он создает папки в папке Weather_day, а не в D0 и D1. - person alexdegrote1995; 28.03.2021
comment
@alexdegrote1995 Ладно, понятно. Мне просто нужно было создать Weather_day в моих каталогах, чтобы я мог воспроизвести результаты. Я отредактировал свой ответ, надеюсь, это приблизит вас к вашему решению. В противном случае дайте мне знать - person Albin; 28.03.2021
comment
Да, отлично сработало :) Спасибо - person alexdegrote1995; 28.03.2021
comment
Отлично, добро пожаловать! :) - person Albin; 28.03.2021

Попробуй это. Вы должны перебрать все подкаталоги. Тебя "./Weather_day" недостаточно.

setwd("./Weather_day")
pathway <- list.files(full.names = F)
for (i in pathway){
    dir.create(paste0(i,"/weather"))
    dir.create(paste0(i,"/temperature"))
}

Ситуация с деревом каталогов до и после: До

weather_day
├── D0
└── D1

После

weather_day
├── D0
│  ├── temperature
│  └── weather
└── D1
   ├── temperature
   └── weather
person Peace Wang    schedule 27.03.2021
comment
Спасибо за ваше предложение. Однако я получаю предупреждение: невозможно создать каталог «D0\weather», причина «Нет такого файла или каталога». В чем проблема? - person alexdegrote1995; 28.03.2021
comment
Чтобы увидеть мой обновленный ответ. Я полагаю, вы находитесь в своем основном каталоге. - person Peace Wang; 28.03.2021