"Index außerhalb der Grenzen" beim Ausführen von apply () in TERR, funktioniert aber in einfachem R
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:
- verwenden
yy
statty
in der anonymen Funktion bereitgestellt fürapply()
(um einige dumme Namensprobleme auszuschließen bezüglichy
) - legen Sie alles in eine
local({...})
blockieren und überprüfen Sie es in R, wie in vorgeschlagen warum ein Fehler "Index außerhalb der Grenzen" in Shiny, aber nicht in R?
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.
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()
stattlist()
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")
)
)
)