"Index außerhalb der Grenzen" beim Ausführen von apply () in TERR, funktioniert aber in einfachem R

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

  •  21-12-2019
  •  | 
  •  

Frage

Wenn ich versuche, den folgenden Code in Spotfire Professional als "R-Skript - Tibco Enterprise Runtime für R" auszuführen:

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)))

Ich erhalte die folgende Fehlermeldung:

TIBCO Enterprise Runtime für R hat einen Fehler zurückgegeben:'Fehler beim Erweitern.namen(x) :index außerhalb der Grenzen'.bei Spotfire.Dxp.Daten.Datenfunktionen.Vollzieher.Lokaler Funktionsclient.Bei Ausführung (FunctionClient funcClient)

(rest der Stapelverfolgung weggelassen)

Der gleiche Code funktioniert jedoch einwandfrei in einfachem R.Wenn ich ersetze mydata_broken mit mydata_ok im Aufruf an apply(), funktioniert alles wie erwartet (sowohl in TERR als auch in Plain R).

Dinge, die ich bisher ausprobiert habe:

Versions- und Konfigurationsinformationen

  • Spotfire 5.5.0, Build-Version 5.5.0.31, Erstellungsdatum:22.05.2013
  • R-Version 3.0.2, 64 Bit (25.09.2013)
  • Windows 7, 64-Bit-Version

Also, meine Frage ist:Mache ich hier einen dummen Fehler?Oder ist das ein Fehler in der Spotfire R-Laufzeit?

UPDATE Ich möchte die Frage erneut öffnen, da ich vom Spotfire-Support eine praktikable Problemumgehung erhalten habe und diese als Antwort hinzufügen möchte.

War es hilfreich?

Lösung

Hier ist eine kurze Zusammenfassung der Antwort, die ich vom Spotfire-Support erhalten habe:

  • es ist in der Tat ein Fehler in TERR (anscheinend kann TERR das nicht lesen list() struktur richtig zu strukturieren, was zu einem Fehler in den Dimensionen der Matrix führt, die sie erstellen sollte);sie arbeiten derzeit daran, das Problem zu beheben
  • als Problemumgehung können Sie verwenden c() statt list() in der Datendefinition

Geänderte Definition von Daten, die in TERR funktionieren

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")
                       )
                     )
    )
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top