如何在Mathematica 8中使用字符串列表作为变量?

时间:2012-05-22 06:24:10

标签: string list wolfram-mathematica

我相信我的问题很简单,我找不到解决方案,我已经用尽了帮助文档寻找类似的情况。

我有一个字符串列表是城市名称,我想设置一个函数/表达式,它使用函数列表中的每个名称,然后在表格中输出结果。在使用Mathematica语言或任何语言编写时,我都是一个完整的新手。如果我使用错误的条款,请耐心等待。以下是我到目前为止所写内容的一个示例。

Module[
 {dateRange, mean, cdd, hdd, station, country, location, population, 
  GDPPerCapita,
  reference = (65 - 32)/1.8, cumList},


 cityLIST = CityData[#, "Name"] & /@ CityData[];


 station =;
 country = CityData[station, "Country"];
 population = CityData[station, "Population"];
 location = CityData[station, "Coordinates"];
 GDPPerCapita = CountryData[country, "GDPPerCapita"];
 dateRange = {{2011, 1, 1}, {2011, 12, 31}, "Day"};
 mean = WeatherData[station, "MeanTemperature", dateRange];
 cdd = Join[Transpose[{mean[[All, 1]]}], 
   Transpose[{Max[# - reference, 0] & /@ mean[[All, 2]]}], 2];
 hdd = Join[Transpose[{mean[[All, 1]]}], 
   Transpose[{Min[# - reference, 0] & /@ mean[[All, 2]]}], 2];
 cumList = Transpose[{Join[
     Transpose[{cdd[[All, 1]]}],
     Transpose[{Drop[FoldList[Plus, 0, cdd[[All, 2]] + hdd[[All, 2]]],
         1]}],
     2]}];


 Grid[station, country, location, population, GDPPerCapita, 
  Last[cumList]]]

cityList是我想要使用的输入列表。我希望cityList中的项目成为站点的变量。然后我希望所有这些输出到一个表(我上面列出的网格只是一个占位符)。我提前道歉,因为这是一些非常基本的东西,我只是无法找到一种方法使它工作。请注意,我正在使用来自Mathematica的策划数据集... cityData,countryData和WeatherData的数据。

如果这里有人对我有一些有用的技巧,我会非常感激!

2 个答案:

答案 0 :(得分:0)

我没有在这台机器上安装Mathematica,所以这可能是一个语法变形的答案。

Mathematica和列表操作的一个有用技巧是首先定义一个对列表元素类型进行操作的函数。在您的情况下,您需要一个功能,如:

writeARowOfMyTable[city_String]:=...

拥有该功能后,您可以通过各种方式将其应用于城市名称列表。一种方法是给函数赋予属性Listable(检查文档),这意味着调用如

writeARowOfMyTable[listOfCityNames_List]

将返回列表中每个城市的行。另一种方法是使用MapApply,再次查看文档。

这只是让你编写函数writeARowOfMyTable[]。我从你的一条评论中看到你做到了这一点。那么我要建议的是将代码包装到一个模块中,如下所示:

writeARowOfMyTable[city_String] := Module[{localVariablesGoHere},codeGoesHere]

答案 1 :(得分:0)

这是解决方案的大纲:

收集所需城市数据的功能:

GetData[city_List] := {city, 
  CityData[city // First, "Population"], 
  CountryData[city // Last, "GDPPerCapita"], 
  CityData[city, "Coordinates"], 
  WeatherData[First@city, 
     "MeanTemperature", {{2011, 1, 1}, {2011, 12, 31}, "Day"}][[All, 2]] // Mean}

将功能映射到您想要的城市,在这种情况下,所有可用的城市:

res=GetData/@CityData[];

以下是前10个城市的输出:

GetData /@ (CityData[][[1 ;; 10]]) // TableForm

但请注意,您可能需要处理一些丢失的数据。

Mathematica graphics