我已经环顾了一会儿,似乎没有找到一个优雅的'解决我的问题,希望有人可以提供一些帮助。
非常简单地说,我的问题是:我希望能够命名多个变量,只有不同的指数'数。然而,这些数字并不是连续的。
粗略地说,我正尝试尝试以下内容:
fileNumbers={332,333,337,345,346};
int i=0;
Do{
i = current_list_item;
fileNumRi = Import[...];
slopeRi = fileNumR[[2]];
... etc ...
}While(inside the list)
然后我会以变量fileNumR332,fileNumR333等结束......
目前我的唯一解决方案是大量复制粘贴,但这变得非常乏味,并且通过拼写错误产生了太多机会。
非常感谢任何建议!
罗南
答案 0 :(得分:1)
标准解决方案是使用变量fileNumR[1], fileNumR[2], fileNumR[3]...
,如下所示:
Do[
(
fileNumR[i]=Import[...];
slopeR[i] = fileNumR[i][[2]];
), {i, fileNumbers}];
(由于您似乎不确定Mathematica的语法,我想建议this collection of useful links。)
答案 1 :(得分:0)
另一种可能的首选方法是使用列表。相当于'Do'循环就像这样:
fileNumbers = {332, 333, 337, 345, 346};
listofcontents=Import["basename" <> ToString[#] <> ".dat"] & /@ fileNumbers;
然后使用Part
表示法引用您的个人数据集,例如:
listofcontents[[1,2]]
这里的缺点是索引是顺序{1,2,3,4,5},你需要直接使用你需要的原始文件编号:
MapIndexed[ (fn[#] = First@#2) & , fileNumbers];
listofcontents[[fn[332],2]]
在大多数情况下,使用列表进行编码的效率会超过那些繁琐的符号。
为了完整起见,您的文字问题的答案是使用ToExpression
,例如:
data = Import[...];
ToExpression[ "filenum" <> ToString[i] <> " = data "]
你最终会得到一个名为filenum332等的符号。这种令人费解的工作方式很少能做到这一点。
答案 2 :(得分:0)
首先制作一些测试数据
fileNumbers = {332, 333, 337, 345, 346};
Export[ToString[#], {{1, 2, 3}, {"slopedata", #}}, "CSV"] & /@ fileNumbers
方法1:使用函数变量(如nikie的解决方案)
Map[(fileNumR[#] = Import[ToString[#]];
slopeR[#] = fileNumR[#][[2]]) &, fileNumbers];
E.g。检查一个变量的输出
slopeR[337]
{slopedata,337}
方法2:创建最初由OP
指定的变量Map[(Evaluate[Symbol[StringJoin["fileNumR", ToString[#]]]] = Import[ToString[#]];
Evaluate[Symbol[StringJoin["slopeR", ToString[#]]]] =
Symbol[StringJoin["fileNumR", ToString[#]]][[2]]) &, fileNumbers];
再次检查一个变量的输出
slopeR337
{slopedata,337}
要在同一会话中重复该过程,需要事先清除变量。
Map[(Clear @@ Names[StringJoin["fileNumR", ToString[#]]];
Evaluate[Symbol[StringJoin["fileNumR", ToString[#]]]] = Import[ToString[#]];
Clear @@ Names[StringJoin["slopeR", ToString[#]]];
Evaluate[Symbol[StringJoin["slopeR", ToString[#]]]] =
Symbol[StringJoin["fileNumR", ToString[#]]][[2]]) &, fileNumbers];
最后,如果您有任何机会需要将fileNumR337
转换为fileNumR[337]
,请参阅此帖子: - https://mathematica.stackexchange.com/a/38767/363