高效迭代R中的列表

时间:2017-04-20 20:01:16

标签: r list

如果我需要分别访问列表中项目的名称和值,那么迭代R中列表的最有效方法是什么?

如果我尝试这样的话:

lst <- list(a = 1, b = 2)
for(i in lst) {
  # ...
}

然后我只获取值,无法看到访问该名称的方法。

目前我这样做:

lst <- list(a = 1, b = 2)
for(i in names(lst)) {
  # something with i
  # something with lst[[i]]
}

但这对我来说似乎非常低效,因为我通过名称访问列表中的每个项目,我认为这个项目很慢。为了避免我这样做:

lst <- list(a = 1, b = 2)
for(i in seq_along(lst)) {
  # something with names(lst)[i]
  # something with lst[[i]]
}

但我不确定这是否效率更高或更低。

是否有比这些方法更有效的方法?如果没有,我应该使用哪些?

修改

this question和@Gladwell的回答给出了另一个建议:

lst <- list(a = 1, b = 2)
names_lst <- names(lst)
for(i in seq_along(lst)) {
  # something with names_lst[i]
  # something with lst[[i]]
}

这是最快的选择吗?它可以以任何方式改进吗?

1 个答案:

答案 0 :(得分:1)

最快的方法是分别执行两个调用并将它们存储为使用矢量化函数,无论你想做什么。

$json_output = json_decode($response);

foreach ($json_output['orders'] as $billing_details) {
echo "<b>Name:</b><br>$billing_details['firstname'] $billing_details['lastname']<br>";}

e.g。

tmpNames <- names(lst)
tmpValues <- as.vector(unlist(lst))

比您当前的实施速度快2-3倍。