K-means 在 PowerBI 中使用 R 失败 NA/NaN/Inf 在外部函数调用中 (arg 1)
K-means fails with R in PowerBI NA/NaN/Inf in foreign function call (arg 1)
我正在使用 Iris 数据集并尝试基于 k-means 聚类创建具有颜色编码聚类的 R Script Visual。该脚本在 R-Studio 中运行良好,但在 PowerBI Desktop 中失败。
这是我所做的:
- 将 Iris 数据集导入为 csv 文件。
- 创建新的 R 脚本视觉对象
- Select 特征列(1-4。排除了带有标签的第 5 列)
- 使用代码创建 k-means 簇并用颜色绘图
示例数据
5.1, 3.5, 1.4, 0.2, Iris-setosa
4.9, 3, 1.4, 0.2, Iris-setosa
4.7, 3.2, 1.3, 0.2, Iris-setosa
4.6, 3.1, 1.5, 0.2, Iris-setosa
5, 3.6, 1.4, 0.2, Iris-setosa
5.4, 3.9, 1.7, 0.4, Iris-setosa
4.6, 3.4, 1.4, 0.3, Iris-setosa
5, 3.4, 1.5, 0.2, Iris-setosa
4.4, 2.9, 1.4, 0.2, Iris-setosa
...
7, 3.2, 4.7, 1.4, Iris-versicolor
6.4, 3.2, 4.5, 1.5, Iris-versicolor
6.9, 3.1, 4.9, 1.5, Iris-versicolor
5.5, 2.3, 4, 1.3, Iris-versicolor
6.5, 2.8, 4.6, 1.5, Iris-versicolor
...
6.7, 3.3, 5.7, 2.1, Iris-virginica
7.2, 3.2, 6, 1.8, Iris-virginica
6.2, 2.8, 4.8, 1.8, Iris-virginica
6.1, 3, 4.9, 1.8, Iris-virginica
6.4, 2.8, 5.6, 2.1, Iris-virginica
....
代码
# Create dataframe
# dataset <- data.frame(Column1, Column2, Column3, Column4)
# Remove duplicated rows
# dataset <- unique(dataset)
dataset <- scale(dataset)
results <- kmeans(dataset, 3)
plot(dataset[,3:4], col = results$cluster)
错误:
Error Message:
R script error.
Error in do_one(nmeth) : NA/NaN/Inf in foreign function call (arg 1)
Calls: kmeans -> do_one
Execution halted
Stack Trace:
Invocation Stack Trace:
Error details
R script error.
Error in do_one(nmeth) : NA/NaN/Inf in foreign function call (arg 1)
Calls: kmeans -> do_one
Execution halted
Stack trace
Microsoft.PowerBI.ExploreServiceCommon.ScriptHandlerException: R script error.
Error in do_one(nmeth) : NA/NaN/Inf in foreign function call (arg 1)
Calls: kmeans -> do_one
Execution halted
---> Microsoft.PowerBI.Radio.RScriptRuntimeException: R script error.
Error in do_one(nmeth) : NA/NaN/Inf in foreign function call (arg 1)
Calls: kmeans -> do_one
Execution halted
at Microsoft.PowerBI.Radio.RScriptWrapper.RunScript(String originalScript, Int32 timeoutMs)
at Microsoft.PowerBI.Client.Windows.R.RScriptHandler.GenerateVisual(String script, String inputVariableName, IDataReader dataReader, Nullable`1 viewportWidthPx, Nullable`1 viewportHeightPx)
--- End of inner exception stack trace ---
at Microsoft.PowerBI.Client.Windows.R.RScriptHandler.GenerateVisual(String script, String inputVariableName, IDataReader dataReader, Nullable`1 viewportWidthPx, Nullable`1 viewportHeightPx)
at Microsoft.PowerBI.ExploreServiceCommon.ScriptVisualCommandFlow.RunInternal(Stream dataShapeResultStream, QueryBindingDescriptor& bindingDescriptor)
at Microsoft.PowerBI.ExploreServiceCommon.ScriptVisualCommandFlow.Run(Stream dataShapeResultStream, QueryBindingDescriptor& bindingDescriptor)
at Microsoft.PowerBI.ExploreHost.SemanticQuery.ExecuteSemanticQueryFlow.TransformDataShapeResult(QueryCommand transformCommand, String dataShapeId, SemanticQueryDataShapeCommand command, Stream dataShapeResultStream, QueryBindingDescriptor& bindingDescriptor)
at Microsoft.PowerBI.ExploreHost.SemanticQuery.ExecuteSemanticQueryFlow.ProcessAndWriteDataQuery(IQueryResultDataWriter queryResultDataWriter, DataShapeGenerationContext dsqGenContext, DataQuery query, ServiceErrorStatusCode& serviceErrorStatusCode)
at Microsoft.PowerBI.ExploreHost.SemanticQuery.ExecuteSemanticQueryFlow.ProcessAndWriteSemanticQueryCommands(IQueryResultsWriter queryResultsWriter, ExecuteSemanticQueryRequest request, IConceptualSchema conceptualSchema)
Activity ID
7608d0ca-3ae2-2f75-4cf6-13c4557d903b
Time
Tue Jun 28 2016 10:46:26 GMT-0700 (US Mountain Standard Time)
Version
2.34.4372.501 (PBIDesktop)
备注
如果我过滤标签第 5 列的数据,则 k-means 有效。事实上,我可以过滤每个标签。我只在完整的、未过滤的数据集上得到错误
这是未过滤时的错误
这正在过滤
原来数据集的最后一行有一个空行。它没有显示使用条形图过滤的选项,但是,当我使用切片器时它确实出现了。
缺少选项
处理数据
修复
我所要做的就是删除空行,它按预期工作了
我正在使用 Iris 数据集并尝试基于 k-means 聚类创建具有颜色编码聚类的 R Script Visual。该脚本在 R-Studio 中运行良好,但在 PowerBI Desktop 中失败。
这是我所做的:
- 将 Iris 数据集导入为 csv 文件。
- 创建新的 R 脚本视觉对象
- Select 特征列(1-4。排除了带有标签的第 5 列)
- 使用代码创建 k-means 簇并用颜色绘图
示例数据
5.1, 3.5, 1.4, 0.2, Iris-setosa
4.9, 3, 1.4, 0.2, Iris-setosa
4.7, 3.2, 1.3, 0.2, Iris-setosa
4.6, 3.1, 1.5, 0.2, Iris-setosa
5, 3.6, 1.4, 0.2, Iris-setosa
5.4, 3.9, 1.7, 0.4, Iris-setosa
4.6, 3.4, 1.4, 0.3, Iris-setosa
5, 3.4, 1.5, 0.2, Iris-setosa
4.4, 2.9, 1.4, 0.2, Iris-setosa
...
7, 3.2, 4.7, 1.4, Iris-versicolor
6.4, 3.2, 4.5, 1.5, Iris-versicolor
6.9, 3.1, 4.9, 1.5, Iris-versicolor
5.5, 2.3, 4, 1.3, Iris-versicolor
6.5, 2.8, 4.6, 1.5, Iris-versicolor
...
6.7, 3.3, 5.7, 2.1, Iris-virginica
7.2, 3.2, 6, 1.8, Iris-virginica
6.2, 2.8, 4.8, 1.8, Iris-virginica
6.1, 3, 4.9, 1.8, Iris-virginica
6.4, 2.8, 5.6, 2.1, Iris-virginica
....
代码
# Create dataframe
# dataset <- data.frame(Column1, Column2, Column3, Column4)
# Remove duplicated rows
# dataset <- unique(dataset)
dataset <- scale(dataset)
results <- kmeans(dataset, 3)
plot(dataset[,3:4], col = results$cluster)
错误:
Error Message:
R script error.
Error in do_one(nmeth) : NA/NaN/Inf in foreign function call (arg 1)
Calls: kmeans -> do_one
Execution halted
Stack Trace:
Invocation Stack Trace:
Error details
R script error.
Error in do_one(nmeth) : NA/NaN/Inf in foreign function call (arg 1)
Calls: kmeans -> do_one
Execution halted
Stack trace
Microsoft.PowerBI.ExploreServiceCommon.ScriptHandlerException: R script error.
Error in do_one(nmeth) : NA/NaN/Inf in foreign function call (arg 1)
Calls: kmeans -> do_one
Execution halted
---> Microsoft.PowerBI.Radio.RScriptRuntimeException: R script error.
Error in do_one(nmeth) : NA/NaN/Inf in foreign function call (arg 1)
Calls: kmeans -> do_one
Execution halted
at Microsoft.PowerBI.Radio.RScriptWrapper.RunScript(String originalScript, Int32 timeoutMs)
at Microsoft.PowerBI.Client.Windows.R.RScriptHandler.GenerateVisual(String script, String inputVariableName, IDataReader dataReader, Nullable`1 viewportWidthPx, Nullable`1 viewportHeightPx)
--- End of inner exception stack trace ---
at Microsoft.PowerBI.Client.Windows.R.RScriptHandler.GenerateVisual(String script, String inputVariableName, IDataReader dataReader, Nullable`1 viewportWidthPx, Nullable`1 viewportHeightPx)
at Microsoft.PowerBI.ExploreServiceCommon.ScriptVisualCommandFlow.RunInternal(Stream dataShapeResultStream, QueryBindingDescriptor& bindingDescriptor)
at Microsoft.PowerBI.ExploreServiceCommon.ScriptVisualCommandFlow.Run(Stream dataShapeResultStream, QueryBindingDescriptor& bindingDescriptor)
at Microsoft.PowerBI.ExploreHost.SemanticQuery.ExecuteSemanticQueryFlow.TransformDataShapeResult(QueryCommand transformCommand, String dataShapeId, SemanticQueryDataShapeCommand command, Stream dataShapeResultStream, QueryBindingDescriptor& bindingDescriptor)
at Microsoft.PowerBI.ExploreHost.SemanticQuery.ExecuteSemanticQueryFlow.ProcessAndWriteDataQuery(IQueryResultDataWriter queryResultDataWriter, DataShapeGenerationContext dsqGenContext, DataQuery query, ServiceErrorStatusCode& serviceErrorStatusCode)
at Microsoft.PowerBI.ExploreHost.SemanticQuery.ExecuteSemanticQueryFlow.ProcessAndWriteSemanticQueryCommands(IQueryResultsWriter queryResultsWriter, ExecuteSemanticQueryRequest request, IConceptualSchema conceptualSchema)
Activity ID
7608d0ca-3ae2-2f75-4cf6-13c4557d903b
Time
Tue Jun 28 2016 10:46:26 GMT-0700 (US Mountain Standard Time)
Version
2.34.4372.501 (PBIDesktop)
备注
如果我过滤标签第 5 列的数据,则 k-means 有效。事实上,我可以过滤每个标签。我只在完整的、未过滤的数据集上得到错误
这是未过滤时的错误
这正在过滤
原来数据集的最后一行有一个空行。它没有显示使用条形图过滤的选项,但是,当我使用切片器时它确实出现了。
缺少选项
处理数据
修复
我所要做的就是删除空行,它按预期工作了