Я начал использовать data.table
для большой модели населения. До сих пор я был впечатлен, потому что использование структуры data.table уменьшает время выполнения моделирования примерно на 30%. Я пытаюсь еще больше оптимизировать свой код и включил упрощенный пример. Мои два вопроса:
- Можно ли использовать оператор
:=
с этим кодом? - Будет ли использовать оператор
:=
быстрее (хотя, если я смогу ответить на свой первый вопрос, я должен ответить на мой вопрос 2!)?
Я использую R версии 3.1.2 на машине под управлением Windows 7 с data.table
версии 1.9.4.
Вот мой воспроизводимый пример:
library(data.table)
## Create example table and set initial conditions
nYears = 10
exampleTable = data.table(Site = paste("Site", 1:3))
exampleTable[ , growthRate := c(1.1, 1.2, 1.3), ]
exampleTable[ , c(paste("popYears", 0:nYears, sep = "")) := 0, ]
exampleTable[ , "popYears0" := c(10, 12, 13)] # set the initial population size
for(yearIndex in 0:(nYears - 1)){
exampleTable[[paste("popYears", yearIndex + 1, sep = "")]] <-
exampleTable[[paste("popYears", yearIndex, sep = "")]] *
exampleTable[, growthRate]
}
Я пытаюсь сделать что-то вроде:
for(yearIndex in 0:(nYears - 1)){
exampleTable[ , paste("popYears", yearIndex + 1, sep = "") :=
paste("popYears", yearIndex, sep = "") * growthRate, ]
}
Однако это не работает, потому что с помощью data.table
вставка не работает, например:
exampleTable[ , paste("popYears", yearIndex + 1, sep = "")]
# [1] "popYears10"
Я просмотрел документацию data.table. В разделе 2.9 часто задаваемых вопросов используется cat
, но это дает нулевой вывод.
exampleTable[ , cat(paste("popYears", yearIndex + 1, sep = ""))]
# [1] popYears10NULL
Кроме того, я пробовал искать Google и rseek.org, но ничего не нашел. Если у вас нет очевидного условия поиска, я был бы признателен за подсказку для поиска. Я всегда находил поиск операторов R жестким, потому что поисковые системы не любят символы (например, ":=
" ), а "R" может быть неопределенным.