问题有点难,酬劳50软妹币

# code
using Pkg
import Base.Threads.@spawn
using CSV
using DataFrames
using DelimitedFiles

datadir = "/home/chenyx/dnameth/gse90496/beta_part.csv"
classdir="/home/chenyx/dnameth/gse90496/class_gse90496.csv"
beta_raw = Matrix(DataFrame(CSV.File(datadir)))
class_file=permutedims(Matrix(CSV.read(classdir)))
probe = beta_raw[:, 1]
exp_profile = beta_raw[:, 2:2802]
rownum,colnum = size(exp_profile)


class=unique(class_file[1,:])
class_matrix=falses(1,2801)
for i in range(1,length(class),step=1)
    global class_matrix
    temp_matrix=falses(1,2801)
    temp_loc=findall(x->x==class[i],class_file)
    temp_matrix[temp_loc].=true
    class_matrix=[class_matrix;temp_matrix]
end
class_matrix=class_matrix[2:end,:]


class_pair_pool=Dict()
for i in range(1,length(class),step=1)
    class_pair_pool[class[i]]=zeros(Int32,1,2)
end


function filter_pair(start_index,end_index,record)
    global class_matrix,exp_profile,class_pair_pool
    for i in range(start_index,end_index,step=1)
        compare_bool=reshape(exp_profile[i,:],1,colnum).>exp_profile[i+1:end,:]
        for j in range(1,size(compare_bool)[1],step=1)
            if length(unique(compare_bool[j,:]))==1
                continue
            end
            temp_compare=reshape(compare_bool[j,:],1,2801).==class_matrix
            temp_sum=sum(temp_compare,dims=2)
            suitabel_class_loc=findall(x->x==0||x==2801,temp_sum)
            if length(suitabel_class_loc)==1
                perfect_combine=[i,i+j]
                class_pair_pool[class[suitabel_class_loc[1][2]]]=[class_pair_pool[class[suitabel_class_loc[1][2]]];perfect_combine]
            end
        end
        open("/home/chenyx/dnameth/gse90496/record/$record.txt","a") do f
            write(f,"$i\n","")
        end
    end
end


all_combinenum=rownum*(rownum-1)/2
process_num=24
single_part_num=all_combinenum÷process_num
interval=zeros(Int32,1,process_num+1)
x=rownum-1
z=0
for i in range(1,process_num+1,step=1)
    global x,z
    if i==1
        interval[1,1]=1
    elseif 1<i<=process_num
        y=(2*x-sqrt(4*x^2-8*single_part_num))÷2
        z=z+y
        x=x-y
        interval[1,i]=z
    else
        interval[1,i]=rownum-1
    end
end
integer = Int32(rownum ÷ 15)
remain = Int32(colnum % 15)
process_pool = Dict()

for i in range(1, process_num, step = 1)
    if i <= process_num-1
        @spawn filter_pair(interval[1,i],interval[1,i+1],i)
    elseif remain>0
        @spawn filter_pair(interval[1,i],interval[1,i+1],i)
    end
end


for i in range(1,91,step=1)
    global class_pair_pool
    df=class_pair_pool[class[i]]
    filename=class[i]
    f=open("/home/chenyx/dnameth/gse90496/pair/class$i.csv","w")
    writedlm(f,df,",")
    close(f)
end

各位大佬,这是我最近做课题写的一段代码,因为涉及课题背景所以就不解释是干什么了,代码是可以跑的,不会报错。我的问题是,这份相同的代码,我首先在linux在线跑,意思就是说,输入julia 进入julia 交互界面,然后把代码复制黏贴是可以跑的,没有任何问题。在定义函数filter_pair部分我里面写了个open函数会把每次循环的i写入文件以便我能够知道代码跑到哪里了。而当我采用pbs作业管理系统提交脚本后,代码依旧可以运行,问题是open函数不再写入文件,我保证我没有对代码做任何修改,只是单纯用了pbs,一下是我的pbs代码

# code
#!/bin/bash
#PBS -S /bin/bash
#PBS -N pair_filter
#PBS -l nodes=1:ppn=24
#PBS -e pair_filter.err
#PBS -o pair_filter.log
export JULIA_NUM_THREADS=24
/home/chenyx/julia-1.5.1/bin/julia /home/chenyx/dnameth/gse90496/pair_linux_v3.jl

因为我的代码用了Base.Threads.@spawn,所以需要设置环境变量 JULIA_NUM_THREADS。关于数据,因为不能上传,所以只能口述,数据是甲基化的beta值矩阵(1000*2802),probe是探针名,exp_profile是具体的值,一共有1000行,2801个样本。class_file标注了样本属于哪些类,这些类是自己定义的,共有91类。当然了,这个并不重要,因为代码并没有错,应该是有一些我不了解的东西,希望有专业的大佬可以解答,小弟愿献上50软妹币酬劳

你可以先试试二分注释,按照每次大概注释一半左右的代码,并保证剩下的代码可运行。重复注释以找出能复现问题的最小工作示例(MWE)。

Minimum Work Example,“最小工作示例”。顾名思义,最小工作示例特点有三:

简短 不包含与问题无关的代码片段;

工作 能够独立运行于他人的电脑上,而不需要添加额外的代码;

示例 在他人计算机上的运行结果,能完整的再现你遇到的问题。

不过就这个问题来说,你认为是和 open 相关的问题,那么可以直接去掉所有计算逻辑,放一个只有open打开文件然后写入的代码提交试试。

现在的代码有一些学科相关的部分,也没有输入测试样例,大家也不是都能访问集群,所以没法调试。

1 个赞

非常感谢您的回复,请回复您的支付宝,如果问题可以解决,我会支付您50软妹币。

问题已解决 感谢各位