"Indice hors limites" lors de l'exécution de apply() dans TERR, mais fonctionne en R simple

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

  •  21-12-2019
  •  | 
  •  

Question

Lorsque j'essaie d'exécuter le morceau de code suivant dans Spotfire Professional en tant que « Script R - 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)))

Je reçois le message d'erreur suivant:

TIBCO Enterprise Runtime for R a renvoyé une erreur :'Erreur dans expand.names(x) :indice hors limites ».sur Spotfire.Dxp.Data.DataFunctions.Executors.LocalFunctionClient.OnExecuting(FunctionClient funcClient)

(reste de la trace de la pile omis)

Cependant, le même code fonctionne parfaitement en R simple.Si je remplace mydata_broken avec mydata_ok dans l'appel à apply(), tout fonctionne comme prévu (à la fois en TERR et en plain R).

Choses que j'ai essayées jusqu'à présent :

Informations sur la version et la configuration

  • Spotfire 5.5.0, version 5.5.0.31, date de build :22.05.2013
  • R version 3.0.2, 64 bits (25/09/2013)
  • Windows 7, 64 bits

Donc, ma question est :Est-ce que je fais une erreur stupide ici ?Ou s'agit-il d'un bug dans le runtime Spotfire R ?

MISE À JOURJ'aimerais rouvrir la question, car j'ai obtenu une solution de contournement viable auprès du support Spotfire, et j'aimerais l'ajouter comme réponse.

Était-ce utile?

La solution

Voici un bref résumé de la réponse que j'ai reçue du support Spotfire :

  • c'est bien un bug de TERR (apparemment, TERR n'est pas capable de lire le list() structure correctement, provoquant un défaut dans les dimensions de la matrice qu'elle était censée créer) ;ils travaillent actuellement à le réparer
  • comme solution de contournement, vous pouvez utiliser c() au lieu de list() dans la définition des données

Définition modifiée des données qui fonctionnent dans 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")
                       )
                     )
    )
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top