AWS.Alexa - Ошибка в data.frame (..., check.names = FALSE): аргументы подразумевают различное количество строк: 1, 0 - PullRequest
0 голосов
/ 14 декабря 2018

Я использую пакет aws.alexa для извлечения исторических данных о веб-трафике для 84 различных веб-сайтов, которые хранятся в символьном векторе, называемом website.names.

Функция, которую я вызываю - traffic_history() - принимает строку в качестве основного аргумента и возвращает фрейм данных, содержащий 5 столбцов.Зная, что функция возвращает информацию только для 1 сайта за раз, я попытался создать цикл, который извлекает историю трафика каждого сайта и сохраняет ее во фрейме данных с именем traffic:

for (i in 1:length(website.names)) {
  traffic[i] <- traffic_history(paste(website.names[i], sep=""))
}

Независимо от того, что я пытаюсь, я получаю сообщение об ошибке: «Ошибка в data.frame (..., check.names = FALSE): аргументы подразумевают различное количество строк: 1, 0.» Это имеет место даже тогда, когдаЯ определяю, что traffic имеет те же измерения, что и то, что, как я ожидаю, он вернет:

traffic <- as.data.frame(matrix(0, ncol = 5, nrow = 84))

Любые мысли о том, как это исправить, будут высоко оценены.

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

решаемая.Это не проблема хранения.Эта ошибка выдается при входе на веб-сайт, который пакет не распознает.В идеале он просто помечает сайт и возвращает ошибку 404, но пока, по крайней мере, этого не происходит.

0 голосов
/ 14 декабря 2018

У меня нет учетной записи для тестирования кода traffic_history, но обычно вы не хотите добавлять данные в фрейм данных.Я обычно создаю список data.frames (или data.tables !), Затем связываю этот список вместе.

webnames <- c("amazon.com", "apple.com")
dflist <- lapply(webnames, data.frame)
data.table::rbindlist(dflist)
#        X..i..
# 1: amazon.com
# 2:  apple.com
## OR
do.call(rbind, dflist) ## slower, but native solution
#        X..i..
# 1: amazon.com
# 2:  apple.com 

Если вы используете цикл for, вы можете предварительно выделить этот списоккак:

dflist <- vector(mode = "list", length = length(webnames))
...