source (): ошибка: длина замены равна нулю - PullRequest
0 голосов
/ 01 октября 2019

Я не мог понять, где может быть проблема или как предложить вам пример данных: у меня довольно длинный скрипт, поэтому я разделяю его на части. Вторая часть о слиянии столбцов. Я измерил прирост из бука, непосредственно измерив прирост, который они имели за последние 3 года. Для елей это было проще, я мог просто измерить высоту этого летнего наконечника, а затем высоту завитков. Как и высота этого года - высота следующих оборотов - это приращение лет. Чтобы сформировать общий столбец с приращением I (а затем переименовать его), я сделал цикл:

for (i in 1:nrow(df)) {
  if(df$Species[i]=="Fi"){
    print(i)
    df$`Length Beech 2019 [cm]`[i] <- df$`Height [cm] 2019`[i] - df$`Höhe Spruce 2018 [cm]`[i]
  } 
}

Эта часть работает без сбоев в том же сценарии. Но если я скопирую всю часть перестановки моего фрейма данных в другой R-скрипт,

> source("2 RedesignDF.R")
[1] 2
Error in df$`Length Beech 2019 [cm]`[i] <- df$`Height [cm] 2019`[i] -  : 
  replacement has length zero

я получу эту ошибку. Первые 10 значений:

> str(df$`Length Beech 2019 [cm]`)
 num [1:113] 25 NA NA 25 23 NA 14.5 19.5 NA NA ...
> str(df$`Height [cm] 2019`)
 num [1:113] 302 186 188 306 258 ...
> str(df$`Höhe Spruce 2018 [cm]`)
 num [1:113] NA 176 178 NA NA ...

Мое первое дерево - бук, поэтому высота первой ели пуста. Я предполагаю, что это источник моей ошибки, но мое замешательство связано с тем, что это не было проблемой при запуске его в том же скрипте.

Я сделал несколько примеров данных:

Species <- c("Bu", "Fi", "Fi", "Bu", "Bu", "Fi", "Bu", "Bu", "Fi", "Fi")
`Length Beech 2019 [cm]` <- c(15.5, NA, NA, 23, 20, NA, 14, 18.5, NA,  NA)
`Height [cm] 2019` <- c(298, 179.5, 306.5, 306.5, 258.5, 188.5, 186, 301.5, 244, 192)
`Höhe Spruce 2018 [cm]` <- c(NA, 169.5, 271, NA,  NA, 170,  NA, NA, 233.5, 188)

df <- data.frame(Species, `Length Beech 2019 [cm]`, `Height [cm] 2019`, `Höhe Spruce 2018 [cm]`)

Если бы кто-то мог объяснить мне, почему это происходит, я был бы очень рад.

Спасибо, вперед!

1 Ответ

1 голос
/ 01 октября 2019

Я выполнил ваш код и обнаружил, что он даже не производит вывод в том же скрипте. Вы можете увидеть после выполнения кода, который вы дали, вывод совпадает с вводом.

Я исправил ваш код, и он производит вывод. Вы можете попробовать это и для другого скрипта r.

for (i in 1:nrow(df)) {
  if(df$Species[i]=="Fi"){
    print(i)
    df$Length.Beech.2019..cm.[i] <- 
              df$Height..cm..2019[i] - df$Höhe.Spruce.2018..cm.[i]
  } 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...