我有一个对数据进行操作的表达式列表。
Min[data]
Max[data]
Covariance[data, data1]
Mean[data]
GeometricMean[data]
Total[data]
Sum[Log[data[[i]]], {i, 1, Length[data]}]
Sum[(data[[i]])^2, {i, 1, Length[data]}]
输出看起来像这样
Out[1]= 1.9
Out[2]= 3.1
....
是否可以显示结果及其表达式?例如
Min[data] = 1.9
Max[data] = 3.1
....
欢迎任何关于如何格式化这种输出以便于阅读的建议!
答案 0 :(得分:6)
您可以使用
$PrePrint =
Function[a,
Row[{ToExpression[InString[$Line], StandardForm, HoldForm], " = ",
a}]];
适用于小输入,但可能不适合多线输入。
(您可以使用Unset[$PrePrint]
)
答案 1 :(得分:4)
data = {1, 2, 3, 4};
data1 = {2, 1, 4, 3};
ClearAll[exprShowAndEvaluate];
SetAttributes[exprShowAndEvaluate, {HoldAll, Listable}];
exprShowAndEvaluate[expr_] := Print[HoldForm[expr], "=", expr];
exprShowAndEvaluate[{Min[data],
Max[data],
Covariance[data, data1],
Mean[data],
GeometricMean[data],
Total[data],
Sum[Log[data[[i]]], {i, 1, Length[data]}],
Sum[(data[[i]])^2, {i, 1, Length[data]}]}];
(* output ==>
*)
<强>更新强>
在Usavich下面的评论中,他表示他希望将这些表达式分配给变量的列表传递给该函数。这不是直接可能的,因为表达式在过程中评估:
expr =
{
Min[data], Max[data], Covariance[data, data1], Mean[data],
GeometricMean[data], Total[data],
Sum[Log[data[[i]]], {i, 1, Length[data]}],
Sum[(data[[i]])^2, {i, 1, Length[data]}]
}
(* Output ==>
{1, 4, 1, 5/2, 2^(3/4) 3^(1/4), 10, Log[2] + Log[3] + Log[4], 30}
*)
在分配之前,您必须Hold
表达式列表:
expr =
Hold[
{
Min[data], Max[data], Covariance[data, data1], Mean[data],
GeometricMean[data], Total[data],
Sum[Log[data[[i]]], {i, 1, Length[data]}],
Sum[(data[[i]])^2, {i, 1, Length[data]}]
}
]
使用新版本的exprShowAndEvaluate,我们可以处理expr:
ClearAll[exprShowAndEvaluate];
exprShowAndEvaluate[expr_Hold] :=
Module[{tempExpr},
tempExpr = ReleaseHold[Map[HoldForm, expr, {2}]];
Print[#1, "=", ReleaseHold[#1]] & /@ tempExpr
];
现在可以使用保留列表调用该函数:
exprShowAndEvaluate[expr]
结果与以前一样。
答案 2 :(得分:0)
作为侧边栏,您有两个可以简化的功能:
Sum[Log[data[[i]]], {i, 1, Length[data]}]
Sum[(data[[i]])^2, {i, 1, Length[data]}]
从版本6开始,可以更简洁,更可读地编写这些内容:
Sum[Log[i], {i, data}]
Sum[i^2, {i, data}]