【发布时间】:2014-01-20 10:56:28
【问题描述】:
我正在尝试使用 apply 将函数应用于列表,但我在执行此操作时遇到了麻烦。我正在尝试使用 emdist 包计算推土机距离。列表中的每个索引都有两个子索引。我想迭代地计算这些子索引的推土机距离(实际列表有数千个索引)。问题是每次我尝试在测试数据集上运行代码时,Rstudio 都会崩溃。测试数据集示例:
set.seed(42)
output1 <- list(list(matrix(0,8,11),matrix(0,8,11)), list(matrix(rnorm(80),8,10),matrix(rnorm(80),8,10)))
[[1]]
[[1]][[1]]
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11]
[1,] 0 0 0 0 0 0 0 0 0 0 0
[2,] 0 0 0 0 0 0 0 0 0 0 0
[3,] 0 0 0 0 0 0 0 0 0 0 0
[4,] 0 0 0 0 0 0 0 0 0 0 0
[5,] 0 0 0 0 0 0 0 0 0 0 0
[6,] 0 0 0 0 0 0 0 0 0 0 0
[7,] 0 0 0 0 0 0 0 0 0 0 0
[8,] 0 0 0 0 0 0 0 0 0 0 0
[[1]][[2]]
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11]
[1,] 0 0 0 0 0 0 0 0 0 0 0
[2,] 0 0 0 0 0 0 0 0 0 0 0
[3,] 0 0 0 0 0 0 0 0 0 0 0
[4,] 0 0 0 0 0 0 0 0 0 0 0
[5,] 0 0 0 0 0 0 0 0 0 0 0
[6,] 0 0 0 0 0 0 0 0 0 0 0
[7,] 0 0 0 0 0 0 0 0 0 0 0
[8,] 0 0 0 0 0 0 0 0 0 0 0
现在当我这样做时:
library(emdist)
sapply(output1,function(x) {emd2d(x[[seq_along(x)[1]]],x[[seq_along(x)[2]]]) })
Rstudio 只是崩溃了。我也试过:
mapply(emd2d,sapply(output1,`[`,1),sapply(output1,`[`,2))
但无济于事。有任何想法吗?我在具有 2GB RAM 的 2013 macbook air 上运行它。
【问题讨论】:
-
seq_along(x)[1]行总是会产生相同的值,1... -
另外,FWIW,我可以通过控制台在 Ubuntu 上成功运行您的任一代码示例。
-
@Justin 我在 OS X 上从包的编译 C 代码中得到一个段错误。不管这里发生了什么,段错误都应该报告给包作者。
-
这里也是 OS X 的一个段错误,但我不明白你认为你对代码做了什么,你没有为函数提供垫子
-
同样,当我在 OSX 上运行
emd2d(output1[[1]][[1]]], output1[[1]][[2]])时,编译后的 C 代码会崩溃。不管帖子中seq_along的使用令人困惑,看起来这是emd2d函数的问题。