varias superponer studio modificar lineas graficos graficas ejes r if-statement conditional calculated-columns

superponer - La condición tiene una longitud> 1 y solo se usará el primer elemento



superponer graficas en r (2)

Tengo un marco de datos, viaje:

> head(trip.mutations) Ref.y Variant.y 1 T C 2 G C 3 A C 4 T C 5 C A 6 G A

Deseo agregar una tercera columna, mutType, que siga estas reglas:

for (i in 1:nrow(trip)) { if(trip$Ref.y==''G'' & trip$Variant.y==''T''|trip$Ref.y==''C'' & trip$Variant.y==''A'') { trip[i, ''mutType''] <- "G:C to T:A" } else if(trip$Ref.y==''G'' & trip$Variant.y==''C''|trip$Ref.y==''C'' & trip$Variant.y==''G'') { trip[i, ''mutType''] <- "G:C to C:G" } else if(trip$Ref.y==''G'' & trip$Variant.y==''A''|trip$Ref.y==''C'' & trip$Variant.y==''T'') { trip[i, ''mutType''] <- "G:C to A:T" } else if(trip$Ref.y==''A'' & trip$Variant.y==''T''|trip$Ref.y==''T'' & trip$Variant.y==''A'') { trip[i, ''mutType''] <- "A:T to T:A" } else if(trip$Ref.y==''A'' & trip$Variant.y==''G''|trip$Ref.y==''T'' & trip$Variant.y==''C'') { trip[i, ''mutType''] <- "A:T to G:C" } else if(trip$Ref.y==''A'' & trip$Variant.y==''C''|trip$Ref.y==''T'' & trip$Variant.y==''G'') { trip[i, ''mutType''] <- "A:T to C:G" } }

pero obtengo el error:

Warning messages: 1: In if (trip$Ref.y == "G" & trip$Variant.y == "T" | trip$Ref.y == ... : the condition has length > 1 and only the first element will be used

No creo que mis declaraciones lógicas deban producir vectores, pero tal vez me falta algo. trip $ mutType debería terminar luciendo así:

mutType A:T to G:C G:C to C:G A:T to C:G A:T to G:C G:C to T:A G:C to A:T

¿Alguien puede ver lo que está mal aquí? Necesito || en lugar de | ¿quizás?


Como sgibb dijo que era un problema si no tenía nada que ver con | o ||.

Aquí hay otra forma de resolver su problema:

for (i in 1:nrow(trip)) { if(trip$Ref.y[i]==''G'' & trip$Variant.y[i]==''T''|trip$Ref.y[i]==''C'' & trip$Variant.y[i]==''A'') { trip[i, ''mutType''] <- "G:C to T:A" } else if(trip$Ref.y[i]==''G'' & trip$Variant.y[i]==''C''|trip$Ref.y[i]==''C'' & trip$Variant.y[i]==''G'') { trip[i, ''mutType''] <- "G:C to C:G" } else if(trip$Ref.y[i]==''G'' & trip$Variant.y[i]==''A''|trip$Ref.y[i]==''C'' & trip$Variant.y[i]==''T'') { trip[i, ''mutType''] <- "G:C to A:T" } else if(trip$Ref.y[i]==''A'' & trip$Variant.y[i]==''T''|trip$Ref.y[i]==''T'' & trip$Variant.y[i]==''A'') { trip[i, ''mutType''] <- "A:T to T:A" } else if(trip$Ref.y[i]==''A'' & trip$Variant.y[i]==''G''|trip$Ref.y[i]==''T'' & trip$Variant.y[i]==''C'') { trip[i, ''mutType''] <- "A:T to G:C" } else if(trip$Ref.y[i]==''A'' & trip$Variant.y[i]==''C''|trip$Ref.y[i]==''T'' & trip$Variant.y[i]==''G'') { trip[i, ''mutType''] <- "A:T to C:G" } }


Obtiene el error porque if solo puede evaluar un vector logical de longitud 1.

Tal vez te pierdas la diferencia entre & ( | ) y && ( || ). La versión más corta funciona a nivel de elemento y la versión más larga usa solo el primer elemento de cada vector, por ejemplo:

c(TRUE, TRUE) & c(TRUE, FALSE) # [1] TRUE FALSE # c(TRUE, TRUE) && c(TRUE, FALSE) [1] TRUE

No necesita la declaración if en absoluto:

mut1 <- trip$Ref.y==''G'' & trip$Variant.y==''T''|trip$Ref.y==''C'' & trip$Variant.y==''A'' trip[mut1, "mutType"] <- "G:C to T:A"