"Индекс за пределами" при запуске 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")
                       )
                     )
    )
Другие вопросы по тегам