"Subscrito fora dos limites" ao executar aplica() em TERRAE, mas funciona na planície R
Pergunta
Quando eu tento executar o seguinte pedaço de código em Spotfire Profissional como um "R Script - Tibco de tempo de execução para 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)))
Recebo a seguinte mensagem de erro:
TIBCO de tempo de execução para R retornou um erro:'Erro na expandir.nomes(x) :inferior à linha fora do limite.em Spotfire.Dxp.Dados.DataFunctions.Executores.LocalFunctionClient.OnExecuting(FunctionClient funcClient)
(o resto do rastreamento de pilha de omitido)
No entanto, o mesmo código funciona perfeitamente na planície R.Se eu substituir mydata_broken
com mydata_ok
na chamada para apply()
, tudo funciona conforme o esperado (tanto na TERR e simples R).
Coisas que eu tentei até agora:
- utilização
yy
em vez dey
em função anônima fornecido paraapply()
(para descartar alguns estúpido de nomeação de questões relativasy
) - colocar tudo em um
local({...})
bloco e check-R, como foi sugerido no por que um "índice fora dos limites de erro" na Brilhante, mas não R?
De versão e as informações de configuração
- Spotfire 5.5.0, versão de compilação 5.5.0.31, data de compilação:22.05.2013
- R versão 3.0.2, 64bit (2013-09-25)
- Windows 7 64bit
Então, minha pergunta é:Estou fazendo algumas erro estúpido aqui?Ou este é um bug em que o Spotfire R tempo de execução?
ATUALIZAÇÃO Gostaria de reabrir a questão, porque eu tenho uma solução viável do Spotfire de apoio, e eu gostaria de adicioná-lo como uma resposta.
Solução
Aqui está um breve resumo da resposta que eu recebi do Spotfire apoio:
- é de fato um erro no TERR (aparentemente, TERR não é capaz de ler o
list()
estrutura adequadamente, causando uma falha nas dimensões da matriz, que era suposto para criar);eles estão atualmente trabalhando para corrigi-lo - como solução alternativa, você pode usar
c()
em vez delist()
na definição de dados
Modificado de definição de dados, que funciona em 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")
)
)
)