Файл, указанный ниже, доступен здесь: 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, что, на мой взгляд, смешно из-за проблемы с дублирующимся именем:
Может быть до 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
}