我遇到了一些我无法解决的问题:目前我正在使用GEOquery包,我想要检索gse文件元数据中的一些信息。
更准确地说,我正在寻找频道标签(例如Cye3)。这是我的代码示例:
>library(GEOquery)
>gse<-getGEO("GSE2253",GSEMatrix=TRUE,destdir=".")
>gse<-gse[[1]]
>gse$label_ch1[1]
V2
Levels: According to Affymetrix protocol (biotin)`
这是我的问题
`> is.na(gse$label_ch1[1])
V2
FALSE
> is.null(gse$label_ch1[1])
[1] FALSE`
这个GSE文件是一个文本文件,在与标签对应的行中(!Sample_label_ch1)没有任何价值。所以,这就是我为我的工作所做的事情:
`if(is.na(gse$label_ch1[1])){
color<-"Non specified"
} else {
label<-gse$label_ch1[1]
}`
所以,如果我没有获得该频道的信息,我只是说&#34;未指定&#34;,否则,我返回该值。但我的脚本中的这个if / else语句出错了:
Error in if (file == "") file <- stdout() else if (is.character(file)) { :
the length of argument is null
很抱歉,如果错误转换不准确,我的R版本是法语^^。
我试过
if(as.character(gse$label_ch1[1])=="")
但它不起作用
如果有人有想法帮助我^^
提前致谢!
脚本:
sample<-NULL
output<-NULL
gse<-NULL
color<-NULL
series_matrix<-dir(getwd(),pattern="*series_matrix.txt")
series_matrix<-unlist(strsplit(series_matrix,"_")[1])
for(i in 1:length(series_matrix)){
gse<-getGEO(series_matrix[i],GSEMatrix=TRUE,destdir=".")
gse<-gse[[1]]
if(length(gse$label_ch1[1])==0){
color<-"Non specified"
} else {
color<-gse$label_ch1[1]
}
print (color)
sample<-cbind(as.character(gse$title),as.character(gse$geo_accession))
outputsample<-paste(getwd(),"/sample.txt",sep="")
write.table(paste("txt",color,sep=""),output,
row.names=FALSE,col.names=FALSE,sep="\t",quote=FALSE)
write.table(sample,outputsample,
row.names=FALSE,col.names=FALSE,sep="\t",quote=FALSE,append=TRUE)
Feature_Num<-list(1:length(featureNames(gse)))
Gene_Symbol<-pData(featureData(gse)[,11])
Probe_Name<-pData(featureData(gse)[,1])
Control_Type<-pData(featureData(gse)[,3])
liste<-as.character(sampleNames(gse))
for(i in 1:lenght(liste)){
values<-cbind(Feature_Num,Gene_Symbol,Probe_name,Control_Type,exprs(gse)[,i])
colnames(values)<-c("Feature_Num","Gene_Symbol",
"Probe_Name","Control_Type","gMedianSignal")
write.table(values,paste(getwd(),"/Ech",liste[i],".txt",sep=""),
row.names=FALSE,quote=FALSE,sep="\t")
}
}
如果您想要解释此脚本中的行,请不要犹豫
答案 0 :(得分:2)
是的,在R
中,您可以创建零长度对象:
foo<-vector()
foo
logical(0)
Then change it:
foo<-NULL
foo
NULL
一开始会让人感到困惑,但如果你曾经拿过一些抽象代数,你可能会记得&#34;空集&#34;和一个唯一元素是&#34;空集的集合。&#34;
答案 1 :(得分:1)
在其他论坛上询问我终于得到了这个非NULL /非NA问题的解决方案:
gse $ label_ch1 [1]是长度为1的数字
> length(gse$label_ch1[1])
[1] 1
但我们可以在字符中转换这个变量:
> as.character(gse$label_ch1[1])
[1] ""
并使用此行
> nchar(as.character(gse$label_ch1[1]))
[1] 0
我们可以看到我可以看到gse $ label_ch1 [1]值是否真的为空
谢谢大家的帮助!
干杯