# 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软妹币酬劳