Вложено для петель, чтобы найти пройденное расстояние

Как будто вы пытаетесь получить доступ к объекту, который является null. Рассмотрим ниже пример:

TypeA objA;

. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException, что имеет смысл.

См. Также этот пример:

String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
0
задан C. Braun 5 April 2019 в 18:08
поделиться

1 ответ

Как правило, в R лучше найти функции, которые выполняют циклы для вас, так как большинство из них настроены для этого. В этом случае вы можете попробовать использовать mutate и lead из пакета dplyr:

library(dplyr)

df <- dplyr::tibble(lat = 1:5, lon = 5:1)
df
# A tibble: 5 x 3
#     lat   lon distance
#   <int> <int>    <dbl>
# 1     1     5     1.41
# 2     2     4     1.41
# 3     3     3     1.41
# 4     4     2     1.41
# 5     5     1    NA   

df %>% mutate(distance = ComputeDistance(lat, lead(lat), lon, lead(lon)))
# A tibble: 5 x 3
#      lat   lon distance
#    <int> <int>    <dbl>
#  1     1    10     1.41
#  2     2     9     1.41
#  3     3     8     1.41
#  4     4     7     NA

Если вы действительно хотите придерживаться циклов for, вам нужен только один для этой задачи , Вы были правы, говоря, что вы проходите через каждую комбинацию. Одной из альтернатив может быть:

for (i in 1:37) {
    output <- ComputeDistance(DistTest[i, 5], DistTest[i + 1, 5],
                              DistTest[i, 6], DistTest[i + 1, 6])
    Name <- 1658
    testid <- rbind(testid, Name)
    testdistance <- rbind(testdistance, output)
}

Одна из причин, по которой следует избегать этой конструкции, заключается в том, что вы постепенно увеличиваете объект (подробнее об этом см. здесь ).

0
ответ дан C. Braun 5 April 2019 в 18:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: