"Индекс за пределами" при запуске apply() в TERR, но работает в обычном R
Когда я пытаюсь запустить следующий фрагмент кода в Spotfire Professional как "R Script - Tibco Enterprise Runtime для R":
mydata_broken <- structure(
list(
Var1 = list(3.99083333270391, 3.99083333270391, 3.99083333270391, 3.99083333270391),
Var2 = list(3.99083333270391, 3.99083333270391, 3.99083333270391, 3.99083333270391)),
row.names = c("1", "2", "3", "4"),
class = "data.frame",
out.attrs = list(dim = c(2L, 2L),
dimnames = list(
Var1 = c("Var1=3.99083333270391", "Var1=3.99083333270391"),
Var2 = c("Var2=3.99083333270391", "Var2=3.99083333270391")
)
)
)
mydata_ok <- structure(
list(
Var1 = list(3.99083333270391),
Var2 = list(3.99083333270391)),
row.names = "1",
class = "data.frame",
out.attrs = list(dim = c(1L, 1L),
dimnames = list(
Var1 = "Var1=3.99083333270391",
Var2 = "Var2=3.99083333270391")
)
)
out <- apply(mydata_broken, 1, function(y) mean(as.numeric(y)))
Я получаю следующее сообщение об ошибке:
TIBCO Enterprise Runtime для R вернул ошибку: "Ошибка в расширениях.имя (x): индекс за пределами". в Spotfire.Dxp.Data.DataFunctions.Executors.LocalFunctionClient.OnExecuting (FunctionClient funcClient)
(остальная часть трассировки стека опущена)
Тем не менее, тот же код работает без ошибок в простой R. Если я заменю mydata_broken
с mydata_ok
в призыве к apply()
все работает как положено (как в TERR, так и в обычном R).
Вещи, которые я пробовал до сих пор:
- использование
yy
вместоy
в анонимной функции, предоставленнойapply()
(чтобы исключить некоторые глупые проблемы с именами, касающиесяy
) - положить все в
local({...})
заблокируйте и проверьте это в R, как было предложено в том, почему в Shiny произошла ошибка "нижний индекс", но не в R?
Информация о версии и конфигурации
- Spotfire 5.5.0, версия сборки 5.5.0.31, дата сборки: 22.05.2013
- Версия R 3.0.2, 64 бита (2013-09-25)
- Windows 7, 64bit
Итак, мой вопрос: я делаю какую-то глупую ошибку здесь? Или это ошибка во время выполнения Spotfire R?
ОБНОВЛЕНИЕ Я хотел бы вновь открыть вопрос, потому что я получил жизнеспособный обходной путь от поддержки Spotfire, и я хотел бы добавить его в качестве ответа.
1 ответ
Вот краткое резюме ответа, полученного от поддержки Spotfire:
- это действительно ошибка в TERR (очевидно, TERR не может прочитать
list()
правильная структура, вызывающая ошибку в размерах матрицы, которую она должна была создать); в настоящее время они работают над его исправлением - В качестве обходного пути вы можете использовать
c()
вместоlist()
в определении данных
Модифицированное определение данных, которые работают в TERR
mydata_working <- structure(
list(
Var1 = c(3.99083333270391, 3.99083333270391, 3.99083333270391, 3.99083333270391),
Var2 = c(3.99083333270391, 3.99083333270391, 3.99083333270391, 3.99083333270391)),
row.names = c("1", "2", "3", "4"),
class = "data.frame",
out.attrs = list(dim = c(2L, 2L),
dimnames = list(
Var1 = c("Var1=3.99083333270391", "Var1=3.99083333270391"),
Var2 = c("Var2=3.99083333270391", "Var2=3.99083333270391")
)
)
)