Estoy tratando de configurar el directorio de trabajo en una subcarpeta diferente en una función. Esperaba que el comando de impresión imprimiera

C:/Users/Blah/Desktop/dir2/SUBFOLDER 

En cambio, imprime

C:/Users/Blah/Desktop/dir2

Sin embargo, cuando ejecuto dirs en la consola, obtengo:

C:/Users/Blah/Desktop/dir2/SUBFOLDER 
...(Much longer list)

Como esperaba. Aquí está mi código:

temp<-function(path)
{
  print(path) #output is C:/Users/Blah/Desktop/dir2
  setwd(path)
  print(getwd())
  xml=xmlParse("filename.xml")
  ...
}

dirs<-list.dirs("C:/Users/Blah/Desktop/dir2")
lapply(dirs,temp)#apply function tempt to every item in dirs
r
0
Rilcon42 17 feb. 2015 a las 00:32

2 respuestas

La mejor respuesta

¿Ha verificado los argumentos opcionales de list.dirs ()? (https: //stat.ethz. ch / R-manual / R-devel / library / base / html / list.files.html)

La documentación dice que, de forma predeterminada, la respuesta incluye la "ruta" en sí, por lo que su función temp se aplicará primero con el directorio que le dé a list.dirs (), "C: / Users / Blah / Desktop / dir2". Es posible que desee probar con list.dirs ("C: / Users / Blah / Desktop / dir2", recursive = FALSE) (si está de acuerdo con lo que desea)

0
davidrd 16 feb. 2015 a las 21:54

Tu pregunta es bastante difícil de seguir.

list.dirs devolverá (por defecto) las rutas relativas al directorio de trabajo actual.

Si cambia el directorio de trabajo, las rutas relativas no serán válidas.

Puede intentar usar full.names = TRUE dentro de list.dirs haciendo que su función temp devuelva el directorio de trabajo a su estado original

temp <- function(path) {
           owd <- getwd()
           on.exit(setwd(owd))
           print(path) 
           setwd(path)
         print(getwd())
    }

Una idea aún mejor podría ser, en lugar de jugar con el directorio de trabajo, simplemente pasar el nombre de archivo apropiado a xmlParse (o lo que sea que esté haciendo su función)

files <- list.files(pattern = '\\.xml$', recurvise = TRUE)
XML <-   lapply(files, xmlParse)
0
mnel 16 feb. 2015 a las 21:52