1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
#
# Copyright 2007-2020 by the individuals mentioned in the source code history
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#------------------------------------------------------------------------------
# Authors: Robert M. Kirkpatrick, Jiang Yang
# Date: 2019-02-15
# Filename: omxReadGRMBin.R
# Purpose: Read GCTA-format GRMs
#------------------------------------------------------------------------------
#This function is adapted from syntax written by Jiang Yang for the GCTA User Manual:
omxReadGRMBin <- function(prefix, AllN=FALSE, size=4, returnList=FALSE){
sum_i = function(i){
return(sum(1:i))
}
BinFileName = paste(prefix,".grm.bin",sep="")
NFileName = paste(prefix,".grm.N.bin",sep="")
IDFileName = paste(prefix,".grm.id",sep="")
id = read.table(IDFileName)
n = dim(id)[1]
BinFile = file(BinFileName, "rb")
grm = readBin(BinFile, n=n*(n+1)/2, what=numeric(0), size=size)
NFile = file(NFileName, "rb")
if(AllN==T){
N = readBin(NFile, n=n*(n+1)/2, what=numeric(0), size=size)
}
else{
N = readBin(NFile, n=1, what=numeric(0), size=size)
}
i = sapply(1:n, sum_i)
if(returnList){
return(list(diag=grm[i], off=grm[-i], id=id, N=N))
}
else{
GRM <- matrix(0.0, nrow=n, ncol=n, dimnames=list(id$V1+id$V2, id$V1+id$V2))
GRM[!lower.tri(GRM,diag=T)] <- grm[-i]
GRM <- GRM + t(GRM)
diag(GRM) <- grm[i]
return(GRM)
}
}
|