error: "La expresión no se ajusta a los tipos de columnas disponibles"<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hola a todos,
En el siguiente código aparece el error: "La expresión no se ajusta a los tipos de columnas disponibles", y ocurre durante la evaluación de la fórmula.
Solo estoy tratando de hacer referencia a la misma tabla a la que estoy agregando una nueva columna, como restar dos columnas dentro de la tabla llamada "dt" a la que estoy agregando una nueva columna... No puedo entender por qué no funciona.
dt = miTabla();
cols = dt << GetColumnNames("Cadena");
//Espera(3);
Para(c=1, c<=NItems(cols), c++,
Si (comienza con (cols), "HTOL"),
dt << Nueva columna (cols|| " Δ", Numérico, Continuo, Fórmula( lista de evaluación (columna (dt, 4)) ) );
);
);
gracias
jeff
Re: error: "La expresión no se ajusta a los tipos de columnas disponibles"Gracias PMroz! Terminé resolviendo esto anoche usando un lenguaje bastante similar al tuyo; usé algo como esto:
Creo que usé análisis.. No recuerdo si tuve que usar eval o no, estoy seguro en un 60% de haberlo hecho.
Si alguien necesita que lo haga, responda a esto y buscaré la sintaxis exacta.
dt << nueva columna( análisis(cols|| " Δ"), Numérico, Continuo, Fórmula(:^cols^ - :datos 0))
Re: error: "La expresión no se ajusta a los tipos de columnas disponibles"Técnica similar a la de @Stephen.pearson:
dt = Nueva mesa ( "Manifestación" , Agregar filas ( 3 ) ,
Nueva columna ( "datos 0" , Numérico , Continuo , Formato ( "Mejor" , 12 ) , Establecer valores ( [ 1 , 2 , 3 ] ) ) ,
Nueva columna ( "datos 100" , Numérico , Continuo , Formato ( "Mejor" , 12 ) , Establecer valores ( [ 4 , 5 , 6 ] ) ) ,
Nueva columna ( "datos 200" , Numérico , Continuo , Formato ( "Mejor" , 12 ) , Establecer valores ( [ 7 , 8 , 9 ] ) )
) ;
columnas = dt << obtener nombres de columnas ( "Cadena" ) ;
para ( C = 1 , C <= nitems ( columnas ) , C ++,
si ( comienza con ( mayúscula ( columnas [ C ]) , "DATOS" ) ,
nueva_col_expr = evalinsertar ( "\[dt << nueva columna( columnas|| " Δ", Numérico, Continuo, Fórmula(:^cols^ - :datos 0))]\") ;
evaluar ( analizar gramaticalmente ( nueva_col_expr )) ;
) ;
) ;
Re: error: "La expresión no se ajusta a los tipos de columnas disponibles"columna(dt,c) no es lo mismo que :datos 100 en lo que a la fórmula se refiere.
Una forma de hacer que este código funcione es utilizar JSL dinámico, que evalúa el JSL antes de ejecutarlo.
// No estoy seguro si esta es la sintaxis correcta pero ya entiendes la idea
ColumnaDestino = columna(dt,c) <
//reemplazo dinámico para ir dentro de la cláusula if
evaluar(
Analizar gramaticalmente(
Insertar evaluación(
"\[
dt << Nueva columna (cols|| " delta", Numérico, Continuo, Fórmula( :^Columna de destino^ - :datos 0 ) );
]\"
) ) );
Si los nombres de sus columnas tienen caracteres especiales, es posible que necesite usar :Name(" ^Columna de destino^ ") en la fórmula. Esto aún puede dar resultados extraños si hay símbolos ^/-+* en el nombre de la columna, ya que la fórmula no se evalúa de manera confiable.
Re: error: "La expresión no se ajusta a los tipos de columnas disponibles"¡¡Gracias por la rápida respuesta!!
Tengo una tabla "dt" que tiene columnas de datos.Pueden ser "dato 0" o "dato 100" o "dato 200", hasta algún número desconocido.
Cualquiera que sea el nombre de la columna, quiero restarle la columna "datos 0", incluso si la columna es "datos 0" (de modo que esa columna sea todo ceros, pero las otras como "datos 100" no sean todos ceros). .
Entonces estaba tratando de tener un bucle for que verificara cada columna, y si se llama "datos 100", por ejemplo, quería que creara automáticamente una columna "datos 100 delta", con la fórmula en ella: (datos 100 - datos 0).
Pensé que podría hacer eso de la siguiente manera:
dt = miTabla();
cols = dt << GetColumnNames("Cadena");
//Espera(3);
Para(c=1, c<=NItems(cols), c++,
Si (comienza con (cols), "datos"),
dt << Nueva columna (cols|| " delta", Numérico, Continuo, Fórmula( columna(dt,c) - :datos 0 ) );
);
);
la referencia ":data 0" parece funcionar: colocará los datos ":data 0" copiados en la columna "data 100 delta", pero si coloco la "columna(dt,c)", intento obtener el columna de datos 100, se produce un error.....
¡¡gracias!!
Re: error: "La expresión no se ajusta a los tipos de columnas disponibles"Jeff,
Tiene razón, el problema es "lista de evaluación (columna (dt, 4))". Eval List() espera que haya una lista para evaluar. por ejemplo: {1,2,3}.
¿Es esto lo que pretendías? ¿El contenido de las listas de columnas (dt, 4)? Como lo más probable es que tenga valores numéricos en esa columna, se genera un error.
Incluso entonces, las columnas de la tabla de datos JMP solo aceptan 3 tipos de datos: numérico, de caracteres y de estado de fila. Si realmente tuviera listas en cada celda de la Columna (4), en realidad serían cadenas. es decir, "{1,2,3}". En ese caso, primero habría que analizar la cadena para convertirla en una expresión, y ENTONCES EvalList() funcionaría.
La pregunta es, ¿qué pretendías que hiciera esa fórmula?