R语言BosonSampling包运行无返回结果问题咨询
R语言BosonSampling包运行示例无输出排查方案
问题场景
用R的BosonSampling包做玻色采样时,哪怕取n=10、m=20这类很小的参数,跑官方示例代码也完全没输出,找不到问题在哪。测试用的代码如下:
library('BosonSampling') library('Rcpp') set.seed(7) n <- 10 m <- 20 A <- randomUnitary(m)[,1:n] valueList <- bosonSampler(A, sampleSize=10, perm = FALSE)$values valueList
排查步骤
按下面的顺序逐段验证,很快就能定位问题:
- 先查依赖加载有没有问题:单独跑
library(Rcpp),看控制台有没有报版本不兼容、加载失败的错。BosonSampling的核心计算全靠Rcpp实现,要是Rcpp加载出问题,后面的计算会直接静默失败,啥提示都没有,碰到这种情况把Rcpp升到适配版本,再重新加载两个包就行。 - 再查酉矩阵生成环节:逐行跑代码到
A <- randomUnitary(m)[,1:n]这步之后,直接在控制台输入A敲回车,看能不能正常输出矩阵内容。要是这步就没反应或者没输出,基本是本地线性代数依赖(BLAS/LAPACK)配置有问题,直接装CRAN提供的预编译版BosonSampling就行,别用本地源码编译安装。 - 抓函数的隐藏报错:bosonSampler碰到部分错误时不会直接把报错打到控制台,用
tryCatch把计算逻辑包起来就能把藏着的报错打出来,参考代码如下:
set.seed(7) n <- 10 m <- 20 A <- randomUnitary(m)[,1:n] res <- tryCatch({ bosonSampler(A, sampleSize=10, perm = FALSE) }, error = function(e) { cat("运行报错:", e$message, "\n") return(NULL) }) if (!is.null(res)) { print(res$values) }
- 排查控制台输出缓冲问题:部分R运行环境(比如旧版Rgui、一些轻量IDE的R插件)有输出缓冲机制,代码跑完了结果不会立刻显示到控制台,在代码最后加一行
flush.console()强制刷新缓冲区,就能看到输出了。
快速验证小技巧:可以先跑n=2、m=4、sampleSize=2的最小参数用例,要是最小用例都出不来结果,百分百是包安装或者依赖配置的问题,和参数大小、计算耗时没关系。
内容的提问来源于stack exchange,提问作者Nima Safa
相关产品推荐
相关产品推荐

