R: L oop с выводом только последней итерации - PullRequest
0 голосов
/ 14 января 2020

У меня 39 json файлов, хранящихся в папке. Все они имеют три общих столбца: MOVEMENT_ID, DISPLAY_NAME и geometry. Я хотел бы получить набор данных, содержащий данные из всех файлов, организованных в эти столбцы. Я использую для L oop, чтобы сделать это.

path = "~/geoboundaries" #path to the folder where the files are stored
file.names=as.list(dir(path, pattern='.json', full.names=T)) 
#make a list of all file names
out.file=st_sf(MOVEMENT_ID=factor(), DISPLAY_NAME=factor(),
 geometry=st_sfc(), crs=st_crs(4326), sf_column_name='geometry') 
#define a void sf object in which the loop results will be stored

Я хочу сделать так, чтобы oop (1) читал каждый файл в списке файлов; (2) содержит только столбцы MOVEMENT_ID, DISPLAY_NAME и geometry; (3) добавляет этот файл в предопределенный объект void sf.

for(i in 1:length(file.names))
 {
  file=st_read(file.names[i]) #(1)
  file=select(file, MOVEMENT_ID, DISPLAY_NAME, geometry) #(2)
  output=rbind(out.file, file) #(3) 
  }

С этим кодом output содержит только последний файл, который был прочитан.

  • Это проблема с объектом void sf?
  • Это вопрос определения строк? output=rbind(out.file, file[i,]) выводит только одну строку последнего файла.

1 Ответ

0 голосов
/ 14 января 2020

Я не могу проверить это сразу, но это должно, по крайней мере, указать вам решение в вашем случае.

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

for(i in 1:length(file.names)) {
  file <- st_read(file.names[i]) #(1)
  file <- select(file, MOVEMENT_ID, DISPLAY_NAME, geometry) #(2)
  out.file <- rbind(out.file, file) #(3) 
}

И последнее: не используйте стрелки в качестве операторов присваивания. Знак равенства должен использоваться для аргументов функции в R.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...