当我尝试在 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)))
我收到以下错误消息:
R 的 TIBCO Enterprise Runtime 返回错误:“expand.names(x) 中的错误:下标越界”。在 Spotfire.Dxp.Data.DataFunctions.Executors.LocalFunctionClient.OnExecuting(FunctionClient funcClient)
(省略堆栈跟踪的其余部分)
但是,相同的代码在纯 R 中完美运行。如果我在调用中替换为mydata_broken
,一切都按预期工作(在 TERR 和纯 R 中)。mydata_ok
apply()
到目前为止我尝试过的事情:
- 在提供给的匿名函数中使用
yy
而不是(以排除一些关于 的愚蠢命名问题)y
apply()
y
- 将所有内容放在一个
local({...})
块中并在 R 中检查它,正如在 Shiny 中为什么出现“下标越界”错误而不是 R 中所建议的那样?
版本和配置信息
- Spotfire 5.5.0,构建版本 5.5.0.31,构建日期:22.05.2013
- R 版本 3.0.2,64 位 (2013-09-25)
- 视窗 7、64 位
所以,我的问题是:我在这里犯了一些愚蠢的错误吗?或者这是 Spotfire R 运行时中的错误?
更新 我想重新提出这个问题,因为我从 Spotfire 支持那里得到了一个可行的解决方法,我想将它添加为答案。