Индекс выходит за пределы при запуске apply() в TERR, но работает в обычном R

Когда я пытаюсь запустить следующий фрагмент кода в Spotfire Professional как «R Script — Tibco Enterprise Runtime for 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 вернула ошибку: «Ошибка в expand.names(x): нижний индекс выходит за пределы». в Spotfire.Dxp.Data.DataFunctions.Executors.LocalFunctionClient.OnExecuting(FunctionClient funcClient)

(остальная часть трассировки стека опущена)

Однако тот же код безупречно работает в простом R. Если я заменю mydata_broken на mydata_ok в вызове apply(), все будет работать как положено (и в TERR, и в простом R).

Вещи, которые я пробовал до сих пор:

Информация о версии и конфигурации

  • Spotfire 5.5.0, версия сборки 5.5.0.31, дата сборки: 22.05.2013
  • R версия 3.0.2, 64 бит (25 сентября 2013 г.)
  • Виндовс 7, 64бит

Итак, мой вопрос: я делаю здесь какую-то глупую ошибку? Или это ошибка в среде выполнения Spotfire R?

ОБНОВЛЕНИЕ Я хотел бы снова открыть вопрос, потому что у меня есть действенный обходной путь от службы поддержки Spotfire, и я хотел бы добавить его в качестве ответа.


person Frank Schmitt    schedule 04.06.2014    source источник
comment
Я подозреваю, что вы привлечете больше внимания, обратившись с этим к коммерческой организации, которая продала вам лицензию - я сомневаюсь, что у многих здесь есть доступ к этому.   -  person Gavin Simpson    schedule 04.06.2014
comment
@GavinSimpson Думаю, ты прав. Я связался со службой поддержки Spotfire по этому вопросу.   -  person Frank Schmitt    schedule 05.06.2014
comment
Я хотел бы снова открыть вопрос, потому что у меня есть жизнеспособный обходной путь от службы поддержки Spotfire, и я хотел бы добавить его в качестве ответа.   -  person Frank Schmitt    schedule 13.06.2014
comment
@FrankSchmitt - я тоже получаю эту ошибку в TIBCO Spotfire 6.5.3, но должно ли это быть связано с тем, как TERR читает структуру? Поскольку я не использую list(), мне интересно, это все еще ошибка?   -  person Chetan Arvind Patil    schedule 08.08.2017
comment
@ChetanArvindPatil Это может быть та же ошибка - я не проверял более новые версии, чем 5.5, так как у меня был жизнеспособный обходной путь (см. Мой ответ на этот вопрос). Если этот обходной путь не работает для вас, вам следует обратиться в службу поддержки Spotfire.   -  person Frank Schmitt    schedule 15.08.2017


Ответы (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")
                       )
                     )
    )
person Frank Schmitt    schedule 13.06.2014