"Personale dei limiti" quando si esegue applicare () in Ter, ma funziona in modo semplice r

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

  •  21-12-2019
  •  | 
  •  

Domanda

Quando provo a eseguire il seguente pezzo di codice in SpotFire Professional come A "R Script - Tibco Enterprise Runtime per 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)))
.

ottengo il seguente messaggio di errore:

Tibco Enterprise Runtime per R ha restituito un errore: "Errore in Expand.Names (X): subscript fuori limite '. a spotfire.dxp.data.datafunctions.executor.localfunctionclient.onexecuting (funcblclient funclient)

(resto della traccia dello stack omessa)

Tuttavia, lo stesso codice funziona in modo impeccabile in Bintalo R. Se sostituisco mydata_broken con mydata_ok nella chiamata a apply(), tutto funziona come previsto (sia in Terr e Pola R).

Cose che ho provato finora:

Versione e informazioni di configurazione

    .
  • Spotfire 5.5.0, Build Version 5.5.0.31, Data di costruzione: 22.05.2013
  • R versione 3.0.2, 64 bit (2013-09-25)
  • Windows 7, 64 bit

Allora, la mia domanda è: sto facendo qualche stupido errore qui? O è un bug nel spotfire r runtime?

Aggiornamento Mi piacerebbe riaprire la domanda, perché ho ottenuto un workaround praticabile dal sostegno del Spotfire, e mi piacerebbe aggiungerlo come risposta.

È stato utile?

Soluzione

Ecco un breve riassunto della risposta che ho ricevuto dal supporto SpotFire:

    .
  • È infatti un bug in Terra (apparentemente, Terriera non è in grado di leggere correttamente la struttura list(), causando un guasto nelle dimensioni della matrice che avrebbe dovuto creare);Attualmente stanno lavorando per fissarlo
  • Come soluzione alternativa, è possibile utilizzare c() anziché list() nella definizione dei dati

Definizione modificata dei dati che funziona in Terra

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top