【发布时间】:2015-06-26 19:09:04
【问题描述】:
我正在尝试执行http://flowingdata.com/2011/05/11/how-to-map-connections-with-great-circles/ 中提到的步骤,但使用data.table。特别是那里列出的第 8 步。附上我的步骤和遇到的问题:
library(data.table)
library(maps)
library(geosphere)
airports <- as.data.table(read.csv("http://datasets.flowingdata.com/tuts/maparcs/airports.csv", header=TRUE))
flights <- as.data.table(read.csv("http://datasets.flowingdata.com/tuts/maparcs/flights.csv", header=TRUE, as.is=TRUE))
setnames(airports,c("airport1",names(airports)[2:7]))
setkey(flights,airport1)
setkey(airports,airport1)
ap <- merge(flights,airports)
setkey(ap,airport2)
setnames(airports,c("airport2",names(airports)[2:7]))
setkey(airports,airport2)
setkey(ap,airport2)
ap2 <- merge(ap,airports)
ap3 <- ap2[,.(airport1,airport2,airline,cnt,lat.x,long.x,lat.y,long.y)]
## ap3[,inter:=gcIntermediate(c(long.x,lat.x),c(long.y,lat.y),n=100,addStartEnd=TRUE),] ## Error in .pointsToMatrix(p1) : Wrong length for a vector, should be 2
## ap3[,inter:=gcIntermediate(c(long.x,lat.x),c(long.y,lat.y),n=100,addStartEnd=TRUE),] ## Error in .pointsToMatrix(p1) : Wrong length for a vector, should be 2
##
## Tried some more stuff but no luck!
## fn <- function(lonx,latx,lony,laty) gcIntermediate(c(lonx,latx),c(lony,laty),n=100,addStartEnd=TRUE)
## ap3[,do.call(fn,.SD),.SDcols=5:8] ## Error in (function (lonx, latx, lony, laty) : unused arguments (lat.x = c(35.21401111, 35.2140 ... snip ...
所以我搜索了 stackoverflow 并尝试了 [1] 和 [2] 中列出的步骤,但无法使其正常工作。我记得在某处(虽然现在找不到)读到 data.table 可以存储列表,但我不知道如何存储。另外,除了常见问题解答第 2.9 节中列出的内容之外,还有其他方法可以调试 j 中的函数吗?
【问题讨论】:
-
很高兴这是可重现的,但您真的需要我们安装这些软件包吗?对于一个相当简单的问题(如何使用列表列)来说,这似乎很复杂。
-
没有。但是我不知道如何表达我遇到的问题,对不起。如果我能找出如何将不同长度/行的列表/矩阵(从函数返回......而不是手动创建)捕获到一个可以工作的 data.table 列中。
标签: r data.table