【发布时间】:2015-12-12 09:59:31
【问题描述】:
我有距离矩阵,每一行都是一个个体,每一列是一个设施。单元格显示从个人到设施的长度。
> head(ODMatrix, 5)
toFacility1 toFacility2 toFacility3 toFacility4 toFacility5 toFacility6 toFacility7 toFacility8 toFacility9 toFacility10
1: 4154.229 1835.176 5228.835 8093.985 7813.0557 2396.326 4055.081 4199.636 6790.750 4206.637
2: 4075.044 4848.875 3403.399 2575.370 501.4027 1072.520 1860.508 3188.388 2639.671 6118.273
3: 5660.299 3767.281 7249.469 4276.207 1917.6547 1288.333 3956.757 4511.083 1576.480 4940.198
4: 6853.425 1385.334 8696.045 7012.102 3201.9396 1708.367 4052.216 5352.751 5315.842 3218.540
5: 6746.253 1735.916 8397.047 5014.986 4820.9541 1681.347 3728.737 5334.818 6826.545 2085.071
有些设施是车站,有些设施是投票站。我想知道哪个最小距离更短。设施 1、2 和 3 是车站,所以 station_col_numbers <- c(1,2,3)。其他设施是投票站。
例如,在第一排的情况下,离他最近的车站是 Facility2 (1835.176m),离他最近的投票站是 Facility6 (2396.326)。然后,我真正想知道的是哪个更接近。在这种情况下,由于 1835.176
analyse <- function(row_I){
row_I_withoutStation <- row_I[ , -station_col_numbers, with=F]
row_I_ToStation <- row_I[ , station_col_numbers, with=F]
toStation_min <- min(row_I_ToStation)
toPollStation_min <- min(col_I_withoutStation)
if (toStation_min >= toPollStation_min){
return(1)
}else{
return(0)
}
}
但是,当我使用apply() 时,它失败了。
Dummy <- apply(ODMatrix, 1, analyse)
Error in row_I[, -station_col_numbers, with = F] :
incorrect number of dimensions
这是对apply() 的滥用吗?我该如何解决?
【问题讨论】:
-
station_row_numbers是否存在?如果确实如此,它的负值作为 data.table 的“j”参数是否有意义???你为什么要首先制作一个只有一行的 data.table 呢?我认为这绝对是对data.table的滥用,并且陪审团不知道apply是否被正确使用,因为这句话想要......“哪个最小距离更短”对我的阅读没有意义。也许如果您逐步完成(用英语)得出特定答案的过程,您可以获得帮助。也许只是apply(ODMatrix, 1, which.min),但很难知道。 -
您检查丢失的尺寸了吗?如果索引矩阵的结果是一个向量,你会丢失一维。函数的输入是数据框的一行。可能
row_I <- data.table(row_I)不会产生您所想的。使用debug(analyse)探索函数的行为。 -
@42- 感谢您的好心cmets,我很抱歉我的问题含糊不清。我添加了解释并更改了一些变量,所以我希望我的观点现在很清楚。
-
@jogo 丢失维度是不是因为
apply()?错误消息说尺寸有问题,但我仍然不确定。如果我使用apply(MATRIX, 1, FUNCTION),这是否意味着在MATRIX的每一行上执行FUNCTION?
标签: r data.table apply