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

StackOverflow https://stackoverflow.com//questions/24038497

  •  21-12-2019
  •  | 
  •  

Вопрос

Когда я пытаюсь запустить следующий фрагмент кода в 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 for R вернул ошибку:'Ошибка в расширении.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 г.)
  • Windows 7, 64-битная версия

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

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

Это было полезно?

Решение

Вот краткое изложение ответа, который я получил от службы поддержки 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")
                       )
                     )
    )
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top