web-dev-qa-db-fra.com

Lorsque vous utilisez SOPPLY, je reçois une erreur dans str2lang (x): <Texte>: 1: 31: Symbole inattendu 1 ^

Lorsque vous exécutez ce code, je vais avoir une erreur:

genes<-colnames(survdata)[-c(1:3)]
univ_formulas<-sapply(genes,function(x)as.formula(paste('Surv(OS,status)~',x)))
Error in str2lang(x) : <text>:1:31: unexpected symbol
1: Surv(OS,status)~ ABC7-42389800N19.1
                                  ^

Si je supprime l'élément et exécutez à nouveau le code, une erreur similaire apparaît à nouveau:

univ_formulas<-sapply(genes,function(x)as.formula(paste('Surv(OS,status)~',x)))
Error in str2lang(x) : <text>:1:26: unexpected symbol
1: Surv(OS,status)~ CITF22-1A6.3
                             ^

Je ne sais pas où le problème est.

exemple de données:

head(genes,n = 50)
 [1] "A1BG"               "A1BG-AS1"           "A2M"               
 [4] "A2M-AS1"            "A2ML1"              "A2MP1"             
 [7] "A3GALT2"            "A4GALT"             "AAAS"              
[10] "AACS"               "AACSP1"             "AADAT"             
[13] "AAED1"              "AAGAB"              "AAK1"              
[16] "AAMDC"              "AAMP"               "AANAT"             
[19] "AAR2"               "AARD"               "AARS"              
[22] "AARS2"              "AARSD1"             "AASDH"             
[25] "AASDHPPT"           "AASS"               "AATF"              
[28] "AATK"               "AATK-AS1"           "ABAT"              
[31] "ABC7-42389800N19.1" "ABCA1"              "ABCA10"            
[34] "ABCA11P"            "ABCA12"             "ABCA13"            
[37] "ABCA17P"            "ABCA2"              "ABCA3"             
[40] "ABCA4"              "ABCA5"              "ABCA6"             
[43] "ABCA7"              "ABCA8"              "ABCA9"             
[46] "ABCB1"              "ABCB10"             "ABCB4"             
[49] "ABCB6"              "ABCB7"   

      
1
whl

En effet, les noms des gènes contiennent - qui base::str2lang considère comme une expression mathématique. Nous pouvons résoudre ce problème comme suit:

  • "Nettoyer" les noms de gènes à convertir - à _ et documenter cela quelque part.

Nous avons alors:

genes <- c("ABC7-42389800N19.1", "AATK-AS1")
sapply(genes,function(x)as.formula(paste('Surv(OS,status)~',
+                                          sub("-", "_",x))))
$`ABC7-42389800N19.1`
Surv(OS, status) ~ ABC7_42389800N19.1
<environment: 0x000002ad508b58e8>

$`AATK-AS1`
Surv(OS, status) ~ AATK_AS1
<environment: 0x000002ad508b3c30>

C'est une illustration de la raison pour laquelle c'est le cas:

A <- 4; B<- 20
str2lang("A-B")
A - B
eval(str2lang("A-B"))
[1] -16

str2lang est essentiellement similaire à la redoutée eval-parse cadre. Depuis les docs, c'est ce qu'il fait:

str2expression (s) et str2lang (s) renvoie des versions spéciales de parse (text = s, garde.source = false) et peut donc être considérée comme la transformation des chaînes de caractères S sur des expressions, des appels, etc.

NOTE

  1. Comme cela doit être utilisé dans la modélisation, il est probablement préférable d'effectuer le sub au stade colnames tel que les données d'entrée sur le modèle disposent des noms que nous prévoyons:
# not tested but you get the idea
colnames(survdata)[-c(1:3)]<-sub("-", "_",colnames(survdata)[-c(1:3)])
  1. Il est important, à des fins biologiques/de recherche, de documenter pourquoi les noms de gènes utilisés comme suggéré dans cette réponse.
0
NelsonGon