Discussion:
[R-es] Optimizar código
Carlos Ortega
2018-02-07 02:57:49 UTC
Permalink
Hola,

Esta es una forma...
str_1 <- c("caliente","frío","gordo","flaco")
str_2 <- c("bueno","malo","bueno","malo")
str_3 <- cbind(str_1, str_2)
l_val <- c("caliente","perro","flaco","gato","coche")
row_god <- which(l_val %in% str_3[,1], arr.ind = TRUE )
row_god
[1] 1 3

Saludos,
Carlos Ortega
www.qualityexcellence.es


El 6 de febrero de 2018, 23:15, Fernando Sanchez via R-help-es <
Hola a todos,
Os pongo aquí debajo un pequeño fragmento de código. Resulta que dispongo
de una CADENA que tiene dos columnas. Una con palabras y la otra que dice
si es bueno o malo. En otra variable tengo una LISTA. Quiero cruzar todas
las palabras de la lista con todas las de la cadena y cuando alguna
coincida, que me indique en qué fila está y también si la palabra es
"buena" o "mala". El código que os pongo más abajo funciona, pero es poco
eficiente cuando las listas son más largas.
Se os ocurre otra forma de programarlo más elegantemente en R.
CADENA_1<-c("caliente","frío","gordo","flaco")CADENA_2<-c("
bueno","malo","bueno","malo")CADENA<-rbind(CADENA_1,CADENA_
2)CADENA<-t(CADENA)LISTA<-c("caliente","perro","flaco","gato","coche")
for (i in 1:nrow(CADENA)) {for (j in 1:length(LISTA))
{if(toString(LISTA[j])==toString(CADENA[i,1]))
{print(paste("fila:",j,CADENA[i,2],sep=" "))}}}
Un saludo y muchas gracias a todos.
[[alternative HTML version deleted]]
_______________________________________________
R-help-es mailing list
https://stat.ethz.ch/mailman/listinfo/r-help-es
--
Saludos,
Carlos Ortega
www.qualityexcellence.es

[[alternative HTML version deleted]]
Francisco Viciana
2018-02-07 08:41:53 UTC
Permalink
Esta es otra forma:

CADENA_1<-c("caliente","frío","gordo","flaco")
CADENA_2<-c("bueno","malo","bueno","malo")
CADENA<-rbind(CADENA_1,CADENA_2)
CADENA<-t(CADENA)
LISTA<-c("caliente","perro","flaco","gato","coche")

# -------

CADENA        <- CADENA_2
names(CADENA) <- CADENA_1
CADENA[LISTA] -> RESULTADO
RESULTADO[!is.na(RESULTADO)]
Post by Carlos Ortega
Hola,
Esta es una forma...
str_1 <- c("caliente","frío","gordo","flaco")
str_2 <- c("bueno","malo","bueno","malo")
str_3 <- cbind(str_1, str_2)
l_val <- c("caliente","perro","flaco","gato","coche")
row_god <- which(l_val %in% str_3[,1], arr.ind = TRUE )
row_god
[1] 1 3
Saludos,
Carlos Ortega
www.qualityexcellence.es
El 6 de febrero de 2018, 23:15, Fernando Sanchez via R-help-es <
Hola a todos,
Os pongo aquí debajo un pequeño fragmento de código. Resulta que dispongo
de una CADENA que tiene dos columnas. Una con palabras y la otra que dice
si es bueno o malo. En otra variable tengo una LISTA. Quiero cruzar todas
las palabras de la lista con todas las de la cadena y cuando alguna
coincida, que me indique en qué fila está y también si la palabra es
"buena" o "mala". El código que os pongo más abajo funciona, pero es poco
eficiente cuando las listas son más largas.
Se os ocurre otra forma de programarlo más elegantemente en R.
CADENA_1<-c("caliente","frío","gordo","flaco")CADENA_2<-c("
bueno","malo","bueno","malo")CADENA<-rbind(CADENA_1,CADENA_
2)CADENA<-t(CADENA)LISTA<-c("caliente","perro","flaco","gato","coche")
for (i in 1:nrow(CADENA)) {for (j in 1:length(LISTA))
{if(toString(LISTA[j])==toString(CADENA[i,1]))
{print(paste("fila:",j,CADENA[i,2],sep=" "))}}}
Un saludo y muchas gracias a todos.
[[alternative HTML version deleted]]
_______________________________________________
R-help-es mailing list
https://stat.ethz.ch/mailman/listinfo/r-help-es
--
+--------------------------------------------------------------
| Francisco J. Viciana Fernández
| Dpto. Indicadores Demográficos
| Servicio de Estadísticas Demográficas y Sociales
| Instituto de Estadística y Cartografía de Andalucía
| Leonardo Da Vinci, nº 21. Isla de La Cartuja.
| 41071 SEVILLA.
| ***@juntadeandalucia.es
+--------------------------------------------------------------
Javier Marcuzzi
2018-02-07 12:46:15 UTC
Permalink
Estimado Fernando Sanchez

Creo que son buenas las ayudas que te han brindado, pero aparte de estas
siempre puedes realizar una compilación de un código que no está
optimizado, puedes ver el siguiente hipervínculo
http://homepage.divms.uiowa.edu/~luke/R/compiler/compiler.pdf

Javier Rubén Marcuzzi

El 6 de febrero de 2018, 19:15, Fernando Sanchez via R-help-es <
Hola a todos,
Os pongo aquí debajo un pequeño fragmento de código. Resulta que dispongo
de una CADENA que tiene dos columnas. Una con palabras y la otra que dice
si es bueno o malo. En otra variable tengo una LISTA. Quiero cruzar todas
las palabras de la lista con todas las de la cadena y cuando alguna
coincida, que me indique en qué fila está y también si la palabra es
"buena" o "mala". El código que os pongo más abajo funciona, pero es poco
eficiente cuando las listas son más largas.
Se os ocurre otra forma de programarlo más elegantemente en R.
CADENA_1<-c("caliente","frío","gordo","flaco")CADENA_2<-c("
bueno","malo","bueno","malo")CADENA<-rbind(CADENA_1,CADENA_
2)CADENA<-t(CADENA)LISTA<-c("caliente","perro","flaco","gato","coche")
for (i in 1:nrow(CADENA)) {for (j in 1:length(LISTA))
{if(toString(LISTA[j])==toString(CADENA[i,1]))
{print(paste("fila:",j,CADENA[i,2],sep=" "))}}}
Un saludo y muchas gracias a todos.
[[alternative HTML version deleted]]
_______________________________________________
R-help-es mailing list
https://stat.ethz.ch/mailman/listinfo/r-help-es
[[alternative HTML version deleted]]

Loading...