Не удается импортировать данные R dump() в JAGS, неожиданный СПИСОК

Я использовал R dump() для создания файла data.txt, как указано в последнем руководстве JAGS, но я продолжаю сталкиваться с этой ошибкой:

Reading data file data.txt
syntax error, unexpected LIST, expecting DOUBLE or NA or ASINTEGER or 'c'

data.txt, созданный dump(), из которого я удалил букву «L», назначенную R:

M <- 4
N <- 2
x <- structure(list(Var1 = c(0, 1, 0, 1), Var2 = c(0, 0, 1, 1)), .Names = c("Var1",
"Var2"), out.attrs = structure(list(dim = c(2, 2), dimnames = structure(list(
    Var1 = c("Var1=0", "Var1=1"), Var2 = c("Var2=0", "Var2=1"
    )), .Names = c("Var1", "Var2"))), .Names = c("dim", "dimnames"
)), class = "data.frame", row.names = c(NA, -4))
counts <- c(377558, 1001, 2000, 2000)
total <- 382559

Если я удалю x, данные будут импортированы правильно, но, очевидно, это не то, чего я хочу. Самое странное, что при использовании пакетов RJAGS и R2JAGS все работает нормально. Кто-нибудь знает, как отформатировать эти данные для работы в JAGS?


person oiiio    schedule 17.01.2016    source источник


Ответы (2)


Как сказал Мартин на форуме JAGS, список (или data.frame) не разрешен в JAGS. Вам нужно преобразовать это в массив или матрицу перед использованием дампа.

Кстати, если вам нужно вызывать JAGS извне, вы также можете проверить пакет runjags (на CRAN), который делает большую часть автоматизации создания файлов для вызова JAGS (попробуйте run.jags(..., method ='interruptible', например, keep.jags.files='my_folder'). Однако вам все равно нужно сначала преобразовать фрейм данных в матрицу.

Мэтт

person Matt Denwood    schedule 19.01.2016
comment
На самом деле я пытаюсь сделать системный вызов JAGS вместо использования R2JAGS в своем Rscript (знаю, это звучит очень странно). Я посмотрю на runjags для этого - person oiiio; 20.01.2016
comment
Совсем не странно — в некоторых ситуациях внешний вызов JAGS предпочтительнее использования прямого интерфейса rjags (для которого R2JAGS является одной оболочкой). Пакет runjags позволяет переключаться между ними. - person Matt Denwood; 21.01.2016

Что, казалось, решило эту проблему для меня, так это простая команда в соответствии с предложением Мартина на плате JAGS:

x <- as.matrix(x)
person oiiio    schedule 20.01.2016