当我尝试在Spotfire Professional中运行以下代码作为" R脚本 - 用于R&#34的Tibco Enterprise Runtime时:
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返回错误:&#39; expand.names(x)出错:下标超出范围&#39;。 在Spotfire.Dxp.Data.DataFunctions.Executors.LocalFunctionClient.OnExecuting(FunctionClient funcClient)
(其余的堆栈跟踪省略)
然而,相同的代码在简单的R中完美地工作。
如果我在mydata_broken
的调用中将mydata_ok
替换为apply()
,则一切都按预期工作(在TERR和普通R中)。
到目前为止我尝试过的事情:
yy
提供的匿名函数中使用y
代替apply()
(以排除有关y
的一些愚蠢的命名问题)local({...})
块中并按照why a "subscript out of bounds" error in Shiny, but not R? 版本&amp;配置信息
所以,我的问题是:我在这里犯了一些愚蠢的错误吗?或者这是Spotfire R运行时中的错误?
更新 我想重新打开这个问题,因为我从Spotfire支持中获得了可行的解决方法,并且我想将其添加为答案。
答案 0 :(得分:2)
以下是我从Spotfire支持部门得到的回复的简短摘要:
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")
)
)
)