【问题标题】:R numeric variable, non null, non na but emptyR数字变量,非空,非na但为空
【发布时间】:2014-09-01 21:12:35
【问题描述】:

大家好##。

我遇到了一些无法解决的 R 问题:目前我正在使用 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]
}`

所以,如果我没有得到频道的信息,我只会说“未指定”,否则,我会返回该值。但是我的脚本中的 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")
 }
}

如果您想了解此脚本中的行,请不要犹豫

【问题讨论】:

  • 如果这是 is.na 应该起作用的一个因素,你能给出类和类型吗?
  • oooh 参数长度为空...您可以尝试 if(length(gse$label_ch1[1])==0) 如果这不起作用,您可以随时尝试使用 double [ 获取变量,例如 gse$label_ch1[[1]]
  • 非常感谢您的回答。它工作得很好^^但不幸的是我总是有这个文件错误。我从 R 开始,所以我不太舒服。因为我总是有这个错误,也许它不是来自我的 if?我让你写我写的脚本(编辑第一条消息)也许你能发现哪里出了问题
  • 准确地说:它在 if 被传递后起作用 ^^ 但它仍然是我的“空”变量的问题

标签: r null numeric na


【解决方案1】:

是的,在R 你可以创建一个长度为零的对象:

 foo<-vector()
 foo
logical(0)

Then change it:  

foo<-NULL
foo
NULL

一开始会让人困惑,但如果你学过一些抽象代数,你可能会记得“空集”和唯一元素是“空集”的集合之间的区别。

【讨论】:

  • 我明白你的意思。也许在我的 gse$label_ch1[1] 中它是“空集”。 gse$label_ch1[1] 是“数字”,长度为 1。你知道是否有一个函数、一个字符或其他任何东西来测试我的变量的值是否是这个空集?
  • if(length(foo)==0)pracma::isempty(foo),也许?
  • 谢谢,但实际上不起作用:length(gse$label_ch1[1]) = 1,我测试 pracma::isempty(gse$label_ch1[1]) 并返回 FALSE。但是我仍然在 gse$label_ch1[1] 中看不到任何值
【解决方案2】:

在其他论坛上提问,我终于得到了这个非 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]的值是不是真的为空

感谢大家的帮助!

干杯

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-25
    • 1970-01-01
    • 2021-03-11
    • 2020-07-15
    • 1970-01-01
    • 2019-09-30
    • 2018-07-04
    相关资源
    最近更新 更多