Python 使用Rpy2执行r脚本并将结果写入csv文件时丢失记录

Python 使用Rpy2执行r脚本并将结果写入csv文件时丢失记录,python,django,rpy2,Python,Django,Rpy2,在使用Rpy2 execute r-script时,我一直遇到输出文件中缺少记录的问题,该脚本具有将分析结果写入csv文件的功能。请参阅下面的源代码 例如,我的源文件(f2)中有785条记录,分析后,输出文件(已处理)中应该有785条记录。然而,我在输出文件中得到的记录更少。当我直接在r中运行r脚本时,没有这样的问题。有人知道什么是错误的吗?谢谢 def make_standardization(filename,outdata): traindata = os.path.join(settin

在使用Rpy2 execute r-script时,我一直遇到输出文件中缺少记录的问题,该脚本具有将分析结果写入csv文件的功能。请参阅下面的源代码

例如,我的源文件(f2)中有785条记录,分析后,输出文件(已处理)中应该有785条记录。然而,我在输出文件中得到的记录更少。当我直接在r中运行r脚本时,没有这样的问题。有人知道什么是错误的吗?谢谢

def make_standardization(filename,outdata):
traindata = os.path.join(settings.MEDIA_ROOT, "default_predict_train.csv") 
testdata = os.path.join(settings.MEDIA_ROOT, filename) 


robjects.r.assign("f1",traindata)
robjects.r.assign("f2",testdata)
robjects.r.assign("processed", outdata)

robjects.r("""
    train.dta=read.csv(f1,header=T)
    test.dta=read.csv(f2,header=T)

    train.h=train.dta[,c(1:2)]
    train.x=train.dta[,-c(1:2)]
    train.colnames=sub("PFGE.XbaI.","",colnames(train.x))
    train.colnames=as.numeric(train.colnames)

    test.h=test.dta[,c(1:2)]
    test.x=test.dta[,-c(1:2)]
    test.x=t(t(test.x))
    temp=matrix(as.numeric(test.x),nrow=nrow(test.x),ncol=ncol(test.x))
    colnames(temp)=colnames(test.x)
    test.x=temp
    test.x[is.na(test.x)]=0.5
    test.colnames=sub("PFGE.XbaI.","",colnames(test.x))
    test.colnames=as.numeric(test.colnames)


    temp=matrix(0,nrow=nrow(test.x),ncol=ncol(train.x))
    colnames(temp)=colnames(train.x)
    rownames(temp)=rownames(test.x)

    for(i in 1:ncol(train.x)){

        if(i == 1) {
            index=which( test.colnames > (train.colnames[i]+train.colnames[i+1])/2    )
            if(length(index)==1){
                temp[,i]=test.x[,index]
            }else{
                temp[,i]=1*(rowSums(test.x[,index])>0)
            }
        }

        if(i == ncol(train.x)) {
            index=which( test.colnames <= (train.colnames[i]+train.colnames[i-1])/2    )
            if(length(index)==1){
                temp[,i]=test.x[,index]
            }else{
                temp[,i]=1*(rowSums(test.x[,index])>0)
            }
        }        

        if(i >1 && i< ncol(train.x)){
            index=which( test.colnames > (train.colnames[i]+train.colnames[i+1])/2  & test.colnames <= (train.colnames[i]+train.colnames[i-1])/2    )
            if(length(index)==1){
                temp[,i]=test.x[,index]
            }else{
                temp[,i]=1*(rowSums(test.x[,index])>0)
            }            
        }            

    }

    test.x=cbind(test.h,temp)

    write.csv(test.x,processed)

""")
def make_标准化(文件名、输出数据):
traindata=os.path.join(settings.MEDIA\u ROOT,“default\u predict\u train.csv”)
testdata=os.path.join(settings.MEDIA\u ROOT,文件名)
robjects.r.assign(“f1”,列车数据)
robjects.r.assign(“f2”,测试数据)
robjects.r.assign(“已处理”,输出数据)
robjects.r(“”)
train.dta=read.csv(f1,页眉=T)
test.dta=read.csv(f2,头=T)
列车h=列车dta[,c(1:2)]
序列x=序列dta[,-c(1:2)]
train.colnames=sub(“PFGE.XbaI.”,“”,colnames(train.x))
train.colnames=as.numeric(train.colnames)
试验h=试验dta[,c(1:2)]
test.x=test.dta[,-c(1:2)]
试验x=t(t(试验x))
温度=矩阵(如数字(测试x),nrow=nrow(测试x),ncol=ncol(测试x))
colnames(temp)=colnames(test.x)
测试x=温度
测试x[is.na(测试x)]=0.5
test.colnames=sub(“PFGE.XbaI.”,“”,colnames(test.x))
test.colnames=as.numeric(test.colnames)
温度=矩阵(0,nrow=nrow(测试x),ncol=ncol(序列x))
colnames(temp)=colnames(train.x)
行名称(临时)=行名称(test.x)
适用于(i/1:ncol(第x列)){
如果(i==1){
index=which(test.colnames>(train.colnames[i]+train.colnames[i+1])/2)
如果(长度(索引)==1){
温度[,i]=测试x[,索引]
}否则{
temp[,i]=1*(行和(test.x[,index])>0)
}
}
如果(i==ncol(序列x)){
index=which(test.colnames 0)
}
}        
如果(i>1&&i(train.colnames[i]+train.colnames[i+1])/2和test.colnames 0)
}            
}            
}
测试x=cbind(测试h,温度)
write.csv(test.x,已处理)
""")

我无法想象这与rpy2有什么关系——您是否检查过,以确保从python运行脚本时使用的文件与从R运行脚本时使用的文件完全相同?您应该尽可能提供自包含的示例代码。弥补一下可能会帮助你解决问题。另外,如果你修正了你文章中的缩进格式也会很有帮助。谢谢所有的提示。事实证明,这并不是诺亚所怀疑的密码问题。我在代码的另一部分添加了flush(),问题就解决了。谢谢