"Subíndice fuera de límites" cuando se ejecuta apply() en TERR, pero funciona en R simple
Pregunta
Cuando intento ejecutar el siguiente fragmento de código en Spotfire Professional como "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)))
Recibo el siguiente mensaje de error:
TIBCO Enterprise Runtime para R devolvió un error:'Error en expandir.nombres(x):subíndice fuera de límites'.en Spotfire.Dxp.Data.DataFunctions.Executors.LocalFunctionClient.OnExecuting(FunctionClient funcClient)
(se omite el resto del seguimiento de la pila)
Sin embargo, el mismo código funciona perfectamente en R simple.si reemplazo mydata_broken
con mydata_ok
en la llamada a apply()
, todo funciona como se esperaba (tanto en TERR como en R simple).
Cosas que he probado hasta ahora:
- usar
yy
en lugar dey
en la función anónima proporcionada aapply()
(para descartar algunos problemas de nombres estúpidos con respecto ay
) - poner todo en un
local({...})
bloquearlo y verificarlo en R, como se sugirió en ¿Por qué aparece un error de "subíndice fuera de límites" en Shiny, pero no en R?
Información de versión y configuración
- Spotfire 5.5.0, versión de compilación 5.5.0.31, fecha de compilación:22.05.2013
- R versión 3.0.2, 64 bits (25/09/2013)
- Windows 7, 64 bits
Entonces, mi pregunta es:¿Estoy cometiendo algún error estúpido aquí?¿O se trata de un error en el tiempo de ejecución de Spotfire R?
ACTUALIZARMe gustaría reabrir la pregunta porque obtuve una solución viable del soporte de Spotfire y me gustaría agregarla como respuesta.
Solución
Aquí hay un breve resumen de la respuesta que recibí del soporte de Spotfire:
- De hecho, es un error en TERR (aparentemente, TERR no puede leer el
list()
estructura adecuadamente, provocando una falla en las dimensiones de la matriz que debía crear);Actualmente están trabajando para solucionarlo. - como solución alternativa, puede utilizar
c()
en lugar delist()
en la definición de datos
Definición modificada de datos que funcionan en 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")
)
)
)