2

次のコードを Spotfire Professional で "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)))

次のエラー メッセージが表示されます。

TIBCO Enterprise Runtime for R がエラーを返しました: 'expand.names(x) のエラー: 添え字が範囲外'. Spotfire.Dxp.Data.DataFunctions.Executors.LocalFunctionClient.OnExecuting (FunctionClient funcClient) で

(残りのスタックトレースは省略)

ただし、同じコードはプレーン R で問題なく動作します。への呼び出しでを置き換えるmydata_brokenと、すべてが期待どおりに動作します (TERR とプレーン R の両方)。mydata_okapply()

私がこれまでに試したこと:

バージョンと構成情報

  • Spotfire 5.5.0、ビルド バージョン 5.5.0.31、ビルド日: 22.05.2013
  • R バージョン 3.0.2、64 ビット (2013-09-25)
  • ウィンドウズ7、64ビット

だから、私の質問は次のとおりです。私はここで愚かな間違いを犯していますか? それとも、これは Spotfire R ランタイムのバグですか?

更新 Spotfire サポートから実行可能な回避策を得たので、質問を再開したいと思います。回答として追加したいと思います。

4

1 に答える 1

2

以下は、Spotfire サポートから得た応答の短い要約です。

  • これは確かに TERR のバグです (明らかに、TERR はlist()構造を適切に読み取ることができず、作成するはずだった行列の次元に障害が発生します)。彼らは現在、修正に取り組んでいます
  • 回避策として、データ定義のc()代わりに使用できますlist()

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")
                       )
                     )
    )
于 2014-06-13T08:38:29.827 に答える