Использование цикла for для назначения векторного местоположения в R - PullRequest
0 голосов
/ 30 октября 2019

Файл, указанный ниже, доступен здесь: https://github.com/iancoleman/cia_world_factbook_api

Я создал пустые векторы для хранения некоторых данных:

vector_length <- 259
country_name <- vector(mode = "character", length = vector_length)
capital_name <- vector(mode = "character", length = vector_length)
introduction <- vector(mode = "character", length = vector_length)
map_reference <- vector(mode = "character", length = vector_length)
total_area <- vector(mode = "character", length = vector_length)

У меня есть два символьных векторных объекта, созданных так:

temp_value <- c('cntry_name','cptl_name','intro','map_ref','ttl_area')
info_data <- c('country_name','capital_name','introduction','map_reference','total_area')

Теперь я хочу заполнить его, используя этот код и простую функцию, которая проверяет, является ли значение нулевым.

z <- 1
for (i in file$countries)
{
  cntry_name <- i$data$name
  cptl_name <- i$data$government$capital$name
  intro <- i$data$introduction$background
  map_ref <- i$data$geography$map_references
  ttl_area <- paste(i$data$geography$area$total$value, i$data$geography$area$total$units)

  for (value in 1:length(info_data))
  {
    if (is.not.null(eval(parse(text=paste0(temp_value[value])))))
    {
      assign(paste0(info_data[value],"[",z,"]"), eval(parse(text=paste0(temp_value[value]))))
    }
  }
  z <- z + 1
}

К сожалению, вместо заполнениявекторы мой вывод выглядит следующим образом в R Studio, что, на мой взгляд, смешно из-за проблемы с дублирующимся именем:

R Studio output values

Может быть до 100 векторовпозже, и я предпочел бы сделать это в цикле, а не писать их по отдельности. Как я могу заполнить свои векторы без индивидуальной записи их всех? Я хочу сжать процесс, который я использовал раньше, используя цикл for, если это возможно, но цикл for не является обязательным, если есть лучшее решение, которое я пропускаю. Это процесс, который работал в цикле for до:

# Gets country names.
cntry_name <- i$data$name
# Gets capital names.
cptl_name <- i$data$government$capital$name
# Get introduction paragraph.
intro <- i$data$introduction$background
# Gets map references, ie. Asia, Africa, etc.
map_ref <- i$data$geography$map_references

if (is.not.null(cntry_name))
{
  # Gets country names.
  country_name[z] <- cntry_name
}
if (is.not.null(cptl_name))
{
  # Gets country names.
  capital_name[z] <- cptl_name
}
if (is.not.null(map_ref))
{
  # Get Map References
  map_reference[z] <- map_ref
}
if (is.not.null(intro))
{
  # Get Introduction
  introduction[z] <- intro
}
...