estructura de directorios: cree las mismas carpetas en diferentes subdirectorios en R

CorePress2024-01-25  10

Intento crear las mismas carpetas en varios subdirectorios en R. Pensé que podía hacer esto con un bucle for, pero no salió según lo planeado

Mi estructura de carpetas es así: Directorio principal/Weather_day. Weather_day contiene las carpetas D0 y D1. Quiero crear las carpetas clima y temperatura tanto en D0 como en D1

Intentó hacerlo así con un bucle for

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

Sin embargo, el resultado de esto es que crea las carpetas en la carpeta del directorio principal. Además, no puedo ejecutar este código dos veces o más porque cambia el directorio de trabajo.

¿Alguna solución para esto? Gracias de antemano

¿De dónde viene la función create.dir? ¿El nombre del paquete es?

- Paz Wang

27/03/2021 a las 15:41

Cometí un error al escribir el código aquí. Se supone que es dir.create() que, hasta donde yo sé, es parte de las funciones estándar de R

- alexdegrote1995

27/03/2021 a las 15:49

Estoy un poco confundido acerca de los nombres de las carpetas D0 y D1 y el nombre en el código con el clima y la temperatura. ¿Puedes explicar esto?

-Albin

27/03/2021 a las 15:53

@Albin, por supuesto. Entonces D0 y D1 representan el día en que se realizaron las mediciones. Son carpetas separadas. Lo que quiero hacer es crear en ambas carpetas nuevos subdirectorios que se llaman temperatura (donde pondré los archivos con la temperatura del día) y clima (donde pondrélos archivos que dicen si llueve, hace sol, nieva, etc.). Sólo quiero tener un código R que cree esto por mí. Como no sé qué cantidad de carpetas hay (día 0 hasta no sé cuándo) quiero crear un bucle for que cree estas carpetas sin tener en cuenta la longitud de la cantidad de carpetas.

- alexdegrote1995

27/03/2021 a las 16:03



------------------------------------

Prueba esto. Debería recorrer todos los subdirectorios. Tu eres "./Weather_day" no es suficiente.

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

La situación del árbol de directorios antes y después: Antes

weather_day
├── D0
└── D1

Después

weather_day
├── D0
│  ├── temperature
│  └── weather
└── D1
   ├── temperature
   └── weather

2

Gracias por tu sugerencia. Sin embargo, recibo una advertencia que dice: no se puede crear el directorio 'D0\weather', motivo 'No existe tal archivo o directorio'. ¿Cuál es el problema aquí?

- alexdegrote1995

28 de marzo de 2021 a las 9:59

Para ver mi respuesta actualizada. Supongo que estás en tu directorio principal.

- Paz Wang

28/03/2021 a las 11:01



------------------------------------

Sugiero que la carpeta Weather_day ya esté creada. Según tu comentario mi sugerencia es la siguiente.

Además, una función también proporciona un uso adicional; por ejemplo, si en el futuro tienes una carpeta adicional, simplemente puedes agregarla con la función.

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"))

Revisé el código y con la instrucción if evitas sobrescribir carpetas existentes, lo cual recomiendo encarecidamente. Pero depende del caso de uso.

Editar

Con respecto a tu comentario ajusté mi sugerencia. No estoy seguro de si es exactamente lo que estás buscando:

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)

Con el código anterior obtienes cada una de las carpetas clima y temperatura en folíder D0 y D1.

3

Probé este código, pero crea una nueva carpeta llamada Weather_day en el directorio principal y coloca las nuevas carpetas "clima" y "temperatura" ahí. Sin embargo, ya tengo una carpeta Weather_day y allí tengo ahora los subdirectorios Día 0 y Día1. Quiero crear las carpetas de clima y temperatura en ambos subdirectorios, tanto en D0 como en D1.

- alexdegrote1995

28 de marzo, 2021 a las 9:50

También intenté editar parte del código eliminando la creación de getwd() y usar la ruta como lo hice anteriormente, pero luego crea las carpetas en la carpeta Weather_day y no en D0 y D1 - alexdegrote1995

28 de marzo de 2021 a las 9:56

@alexdegrote1995 Está bien, ya veo. Solo tuve que crear Weather_day en mi directorio.ectorías que pude reproducir los resultados. Edité mi respuesta, espero que esto te acerque a tu solución. Si no, házmelo saber

-Albin

28/03/2021 a las 10:29

Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare