Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json 在矩阵中填入“0”;For Loop";时间太长了_Json_R_For Loop_Bigdata - Fatal编程技术网

Json 在矩阵中填入“0”;For Loop";时间太长了

Json 在矩阵中填入“0”;For Loop";时间太长了,json,r,for-loop,bigdata,Json,R,For Loop,Bigdata,我试图通过使用for循环创建一个大约1000000 x 5的数据帧,但是已经5个多小时了,我认为它不会很快完成。我使用rjson库从一个大的json文件中读取数据。有人能帮我以更快的方式填充这个数据框吗 library(rjson) # read in data from json file file <- "/filename" c <- file(file, "r") l <- readLines(c, -1L) data <- lapply(X=l, fromJS

我试图通过使用for循环创建一个大约1000000 x 5的数据帧,但是已经5个多小时了,我认为它不会很快完成。我使用rjson库从一个大的json文件中读取数据。有人能帮我以更快的方式填充这个数据框吗

library(rjson)

# read in data from json file
file <- "/filename"
c <- file(file, "r")
l <- readLines(c, -1L)
data <- lapply(X=l, fromJSON)

# specify variables that i want from this data set
myvars <- c("url", "time", "userid", "hostid", "title")
newdata <- matrix(data[[1]][myvars], 1, 5, byrow=TRUE)

# here's where it goes wrong
for (i in 2:length(l)) {
newdata <- rbind(newdata, data[[i]][myvars])
}

newestdata <- data.frame(newdata)
库(rjson)
#从json文件读入数据

文件如果没有数据,很难确定,但是您正在做的一些事情相对来说比较慢。这应该更快,但同样,如果没有数据,我无法测试:

newdata <- vapply(data, `[`, character(5L), myvars)

newdata这需要花费很长时间,因为循环的每次迭代都会创建一个新的、更大的对象。试试这个:

slice <- function(field, data) unlist(lapply(data, `[[`, field))
data.frame(Map(slice, myvars, list(data)))

slice你在第二圈了。看看R地狱。每次循环迭代都会增加
newdata
,消耗资源。最好为1000000 x 5矩阵预先分配内存,然后填写信息……但惯用的方法是类似于
do.call(rbind,data)
。请参阅data.table包中的
rbindlist
,以了解更快速的功能。R是一种随更改而复制的功能,因此每次循环所需的时间都呈指数级增加。在
lappy
或类似的东西上使用
rbindlist
(来自
data.table
)这在较小的测试数据集上有效,但在实际的大数据集上无效。这里怎么了?这就是我犯的错误。“data.frame(buzz=c(“,”:参数表示不同的行数:1349674,1339352”您能否更准确地说明“不工作”?如果您收到错误消息,能否共享?您的文件中是否有不包含所有五个条目的记录?错误消息发布在上面。我在运行“newdata length”行时遇到此错误(数据)是1349674所以是的,您有缺少条目的记录。请尝试将上面的
slice
替换为以下内容:
slice