C++ R错误:join\u cols()/join\u vert():列数必须相同

C++ R错误:join\u cols()/join\u vert():列数必须相同,c++,r,C++,R,我在用R中的bayesm包拟合带有协变量的工具变量模型时遇到问题。添加协变量会导致错误消息: “错误:join\u cols()/join\u vert():列数必须相同” 错误源于通过rcpp调用的外部函数“rivDP\u rcpp\u loop.cpp”。然而,我没有足够的技能来处理R级别的问题 我在函数示例的基础上构建了一个示例,该示例导致我的机器出现错误 ## ## simulate scaled log-normal errors and run ## set.seed(66) k=1

我在用R中的bayesm包拟合带有协变量的工具变量模型时遇到问题。添加协变量会导致错误消息: “错误:join\u cols()/join\u vert():列数必须相同”

错误源于通过rcpp调用的外部函数“rivDP\u rcpp\u loop.cpp”。然而,我没有足够的技能来处理R级别的问题

我在函数示例的基础上构建了一个示例,该示例导致我的机器出现错误

##
## simulate scaled log-normal errors and run
##
set.seed(66)
k=10
delta=1.5
Sigma=matrix(c(1,.6,.6,1),ncol=2)
N=1000
tbeta=4
set.seed(66)
scalefactor=.6
root=chol(scalefactor*Sigma)
mu=c(1,1)
##
## compute interquartile ranges
##
ninterq=qnorm(.75)-qnorm(.25)
error=matrix(rnorm(100000*2),ncol=2)
error=t(t(error)+mu)
Err=t(t(exp(error))-exp(mu+.5*scalefactor*diag(Sigma)))
lnNinterq=quantile(Err[,1],prob=.75)-quantile(Err[,1],prob=.25)
##
## simulate data
##
error=matrix(rnorm(N*2),ncol=2)%*%root
error=t(t(error)+mu)
Err=t(t(exp(error))-exp(mu+.5*scalefactor*diag(Sigma)))
#
# scale appropriately  
Err[,1]=Err[,1]*ninterq/lnNinterq
Err[,2]=Err[,2]*ninterq/lnNinterq
z=matrix(runif(k*N),ncol=k)
x=z%*%(delta*c(rep(1,k)))+Err[,1]
y=x*tbeta+Err[,2]
w<-matrix(rnorm(10000),ncol=10)

# set intial values for MCMC
Data = list(); Mcmc=list()
Data$z<-cbind(z,w);  Data$x=x; Data$y=y; Data$w<-w

# start MCMC and keep results
Mcmc$maxuniq=100
Mcmc$R=R
end=Mcmc$R
begin=100

out=rivDP(Data=Data,Mcmc=Mcmc)
##
##模拟缩放日志正常错误并运行
##
种子(66)
k=10
δ=1.5
西格玛=矩阵(c(1,6,6,1),ncol=2)
N=1000
tbeta=4
种子(66)
scalefactor=.6
根=胆固醇(标度因子*西格玛)
mu=c(1,1)
##
##计算四分位范围
##
ninterq=qnorm(.75)-qnorm(.25)
误差=矩阵(rnorm(100000*2),ncol=2)
误差=t(t(误差)+mu)
Err=t(t(exp(error))-exp(mu+.5*scalefactor*diag(Sigma)))
lnNinterq=分位数(误差[,1],概率=.75)-分位数(误差[,1],概率=.25)
##
##模拟数据
##
错误=矩阵(rnorm(N*2),ncol=2)%*%根
误差=t(t(误差)+mu)
Err=t(t(exp(error))-exp(mu+.5*scalefactor*diag(Sigma)))
#
#适当缩放
Err[,1]=Err[,1]*ninterq/lnNinterq
Err[,2]=Err[,2]*ninterq/lnNinterq
z=矩阵(runif(k*N),ncol=k)
x=z%*%(δ*c(代表(1,k))+Err[,1]
y=x*tbeta+Err[,2]

w我也遇到了同样的问题,已经联系了软件包维护人员进行澄清。与此同时,我从2012年下载了版本2.2-5,使rivDP()函数能够正常工作。请确保首先安装Rtools(从此处:),然后运行以下代码:

packageurl <- "https://cran.r-project.org/src/contrib/Archive/bayesm/bayesm_2.2-5.tar.gz"
install.packages(packageurl, repos=NULL, type="source")

library(bayesm)

packageurl谢谢你的建议。我在我们的群集计算机上尝试了这个方法,但它不起作用,仍然产生相同的错误。通过联系该软件包的作者,我了解到将一些算法更改为Rcpp是问题的根源,并计划在9月份发布新的软件包。