首页 > 解决方案 > AWS.Alexa - data.frame 中的错误(...,check.names = FALSE):参数暗示不同的行数:1、0

问题描述

我正在使用该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))

任何有关如何解决此问题的想法将不胜感激。

标签: rfunctionamazon-web-servicesvectorcharacter

解决方案


我没有测试traffic_history代码的帐户,但通常您不想附加到 data.frame。我通常会创建一个 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))

推荐阅读