简体   繁体   English

as.vector(x) 中的错误:没有将此 S4 class 强制为向量的方法

[英]Error in as.vector(x) : no method for coercing this S4 class to a vector

I am trying to run an R script on the command line of bash (I am using CentOS 8) with the command: cat 1_myScript.R | R --slave --args $SAMPLE"_x" $SAMPLE"_y" I am trying to run an R script on the command line of bash (I am using CentOS 8) with the command: cat 1_myScript.R | R --slave --args $SAMPLE"_x" $SAMPLE"_y" cat 1_myScript.R | R --slave --args $SAMPLE"_x" $SAMPLE"_y"

where $SAMPLE is an argument that I have specified in the R script as follows其中 $SAMPLE 是我在 R 脚本中指定的参数,如下所示

> args<-commandArgs()

> aaa<-args[4]

This syntax always worked for all of my scripts, but now it gives me the following error:此语法始终适用于我的所有脚本,但现在它给了我以下错误:

Error in as.vector(x): no method for coercing this S4 class to a vector as.vector(x) 中的错误:没有将此 S4 class 强制为向量的方法

Calls: setdiff -> setdiff.default -> -> as.vector调用:setdiff -> setdiff.default -> -> as.vector

Execution halted执行停止

the strange thing is that if I try to run this script in the R console奇怪的是,如果我尝试在 R 控制台中运行此脚本

>source("1_myScript.R")

it proceeds with no errors.它继续没有错误。 I have looked up and it appears to be a feature linked to the library "GenomicRanges", which I used in the script.我查了一下,它似乎是一个链接到我在脚本中使用的库“GenomicRanges”的功能。 Here is the body of my script (note that I don't know the exact line where it fails):这是我的脚本的主体(请注意,我不知道它失败的确切行):

#!/usr/bin/env Rscript

library(rtracklayer)
library(data.table)
library(tidyverse)
#args <- commandArgs()
#aaa<-args[4]
aaa<-gsub("_T.finalSorted.bam_CNVs","",args[1])
targDir<-"/srv/ngsdata/dalteriog/SV_analysis/example/WGS_NB_novogene/CNVDir/"
dataTable <-fread((paste0(targDir,args[2]), header=TRUE)
ratio<-data.frame(dataTable)

dataTable <-fread(paste0(targDir,args[1]), header=FALSE)
cnvs<- data.frame(dataTable)

ratio$Ratio[which(ratio$Ratio==-1)]=NA

cnvs.bed=GRanges(cnvs[,1],IRanges(cnvs[,2],cnvs[,3])) # primo ogetto del GRange obj --> chr; secondo --> range
ratio.bed=GRanges(ratio$Chromosome,IRanges(ratio$Start,ratio$Start),score=ratio$Ratio) # score è un metadata

overlaps <- subsetByOverlaps(ratio.bed,cnvs.bed) # regioni overlappanti i due df
normals <- setdiff(ratio.bed,cnvs.bed) # regioni diverse
normals <- subsetByOverlaps(ratio.bed,normals) # la stessa cosa, ma con lo score associato

#mu <- mean(score(normals),na.rm=TRUE)
#sigma<- sd(score(normals),na.rm=TRUE)

#hist(score(normals),n=500,xlim=c(0,2))
#hist(log(score(normals)),n=500,xlim=c(-1,1))

#shapiro.test(score(normals)[which(!is.na(score(normals)))][5001:10000])
#qqnorm (score(normals)[which(!is.na(score(normals)))],ylim=(c(0,10)))
#qqline(score(normals)[which(!is.na(score(normals)))], col = 2)

#shapiro.test(log(score(normals))[which(!is.na(score(normals)))][5001:10000])
#qqnorm (log(score(normals))[which(!is.na(score(normals)))],ylim=(c(-6,10)))
#qqline(log(score(normals))[which(!is.na(score(normals)))], col = 2)

numberOfCol=length(cnvs)

for (i in c(1:length(cnvs[,1]))) {
  values <- score(subsetByOverlaps(ratio.bed,cnvs.bed[i])) #score bayesiano della iesima CNV che overlappa con il file ratio 
  #wilcox.test(values,mu=mu)
  W <- function(values,normals){resultw <- try(wilcox.test(values,score(normals)), silent = TRUE)
    if(class(resultw)=="try-error") return(list("statistic"=NA,"parameter"=NA,"p.value"=NA,"null.value"=NA,"alternative"=NA,"method"=NA,"data.name"=NA)) else resultw}
  KS <- function(values,normals){resultks <- try(ks.test(values,score(normals)), silent = TRUE)
    if(class(resultks)=="try-error") return(list("statistic"=NA,"p.value"=NA,"alternative"=NA,"method"=NA,"data.name"=NA)) else resultks}
  #resultks <- try(KS <- ks.test(values,score(normals)), silent = TRUE)
  # if(class(resultks)=="try-error") NA) else resultks
  cnvs[i,numberOfCol+1]=W(values,normals)$p.value
  cnvs[i,numberOfCol+2]=KS(values,normals)$p.value
  }

if (numberOfCol==5) {
  names(cnvs)=c("chr","start","end","copy number","status","WilcoxonRankSumTestPvalue","KolmogorovSmirnovPvalue")  
}
if (numberOfCol==7) {
  names(cnvs)=c("chr","start","end","copy number","status","genotype","uncertainty","WilcoxonRankSumTestPvalue","KolmogorovSmirnovPvalue")  
}
if (numberOfCol==9) {
  names(cnvs)=c("chr","start","end","copy number","status","genotype","uncertainty","somatic/germline","precentageOfGermline","WilcoxonRankSumTestPvalue","KolmogorovSmirnovPvalue")  
}

cnvs$Wfdr <- p.adjust(cnvs$WilcoxonRankSumTestPvalue, method="BH",n=nrow(cnvs))
cnvs$KSfdr <- p.adjust(cnvs$KolmogorovSmirnovPvalue, method="BH",n=nrow(cnvs))
cnvs<-subset(cnvs, Wfdr <= 0.05 & KSfdr <= 0.05)



samp<-gsub("_T.finalSorted.bam_CNVs","",aaa)
cnvs<-add_column(cnvs, Sample=samp, .before=1)
write.table(cnvs, file=paste(targDir,aaa,"CNV.p.filtered.txt",sep=""),sep="\t",quote=F,row.names=F)

it seems that the problem stands at the line 22:似乎问题出在第 22 行:

normals <- setdiff(ratio.bed,cnvs.bed)

in this case, we want to find differences between two granges objects, but the function that does this operation is setdiff of GenomicRanges, that is masked by the package base.在这种情况下,我们想要找到两个 grange 对象之间的差异,但是执行此操作的 function 是setdiff的 setdiff,它被 package 基础所掩盖。 The solution to the answer is to edit such line in this way:答案的解决方案是以这种方式编辑这样的行:

normals <- GenomicRanges::setdiff(ratio.bed,cnvs.bed)

Thank you again for your effort!再次感谢您的努力!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 as.vector(data) 中的错误:没有将此 S4 class 强制为向量的方法 - Error in as.vector(data) : no method for coercing this S4 class to a vector as.vector(data) 中的错误:无法将此 S4 class 强制转换为 R 中的向量 - Error in as.vector(data) : no method for coercing this S4 class to a vector in R 软件包CVXR:as.vector(data)中的错误:没有用于将此S4类强制转换为向量的方法 - Package CVXR: Error in as.vector(data): no method for coercing this S4 class to a vector as.vector中的APCluster错误(数据):没有用于将此S4类强制转换为向量的方法 - APCluster Error in as.vector(data): no method for coercing this S4 class to a vector CVXR:as.vector(数据)中的错误:没有方法将此 S4 class 强制转换为向量 - CVXR: Error in as.vector(data): no method for coercing this S4 class to a vector CVXR:solve() 的问题 - as.vector(data) 中的错误:无法将此 s4 class 强制转换为向量 - CVXR: Problem with solve() - Error in as.vector(data): no method for coercing this s4 class to a vector 没有将这个 S4 类强制为向量以使用 mclust 的方法 - no method for coercing this S4 class to a vector for utilization of mclust 在 SparkR 中运行相关性:没有将此 S4 类强制转换为向量的方法 - Running correlations in SparkR: no method for coercing this S4 class to a vector getMethod导致“ as.vector(…中的错误” - getMethod resulting in “Error in as.vector(…” 获取“as.vector(x.mode) 中的错误:无法将类型‘closure’强制转换为‘any’类型的向量” - Getting "Error in as.vector(x.mode): cannot coerce type 'closure' to vector of type 'any'"
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM