R variable numérique non nulle, non na, mais vide
Hi eveyrone ##.
J'ai eu quelques problème avec les R que je ne peux pas corriger: Actuellement je travaille avec GEOquery paquet et je veux récupérer des informations dans les métadonnées de la gse fichiers.
Plus précisément, je suis à la recherche pour le nom de canal (par exemple Cye3). Voici un exemple de mon code :
>library(GEOquery)
>gse<-getGEO("GSE2253",GSEMatrix=TRUE,destdir=".")
>gse<-gse[[1]]
>gse$label_ch1[1]
V2
Levels: According to Affymetrix protocol (biotin)`
Et voici mon problème
`> is.na(gse$label_ch1[1])
V2
FALSE
> is.null(gse$label_ch1[1])
[1] FALSE`
Cette GSE fichier est un fichier texte et dans la ligne correspondant à l'étiquette (!Sample_label_ch1) il n'y a pas de valeur.Donc, voici ce que je v faire de mon travail:
`if(is.na(gse$label_ch1[1])){
color<-"Non specified"
} else {
label<-gse$label_ch1[1]
}`
Donc, si je n'ai pas d'informations pour le canal je viens de dire "non spécifié", sinon, je reviens de la valeur. Mais j'ai réussit a reçu l'erreur avec ce if/else dans mon script:
Error in if (file == "") file <- stdout() else if (is.character(file)) { :
the length of argument is null
Désolé si l'erreur de traduction n'est pas exacte, mon R version est en français ^^.
J'ai essayé
if(as.character(gse$label_ch1[1])=="")
Mais il ne fonctionne pas, soit
Si quelqu'un a une idée pour m'aider ^^
Merci d'avance!
Script:
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")
}
}
N'hésitez pas si vous voulez l'explication sur les lignes de ce script
- si c'était un facteur de l'est.na aurait travaillé, pouvez-vous donner la classe et le genre?
- oooh la longueur de l'argument est null... vous pouvez essayer
if(length(gse$label_ch1[1])==0)
si cela ne fonctionne pas, vous pouvez toujours essayer d'obtenir la variable à double[
commegse$label_ch1[[1]]
- Merci beaucoup pour votre réponse. il fonctionne très bien ^^ Mais malheureusement j'ai toujours cette erreur de fichier. Je suis en commençant par R, donc je suis pas vraiment à l'aise. Depuis j'ai toujours cette erreur peut-être que ça ne vient pas de mon cas? Je vous laisse le script (éditer le premier message), j'ai écrit peut-être que vous pourriez détecter ce qui ne va pas
- Juste pour précision: il fonctionne depuis le s'est passé ^^ mais il reste encore le problème de mon "vide" variable
Vous devez vous connecter pour publier un commentaire.
Oui, dans
R
vous pouvez créer un zéro-longueur de l'objet:C'est déroutant au premier abord, mais si vous avez déjà pris quelques algèbre abstraite, vous pouvez vous rappeler la différence entre le "vide de sens" et d'un ensemble dont le seul élément est "l'ensemble vide."
if(length(foo)==0)
oupracma::isempty(foo)
, peut-être?Demander sur d'autres forum, j'ai enfin trouver une solution pour cette non-NULLE/non NA problème:
le gse$label_ch1[1], est la numérique de longueur 1
mais nous pouvons transformer cette variable de caractère:
et avec cette ligne
nous pouvons voir que je peux voir si le gse$label_ch1[1] la valeur est en fait vide ou n'est pas
Merci à vous tous pour votre aide!
Acclamations