如果我需要分别访问列表中项目的名称和值,那么迭代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]]
}
这是最快的选择吗?它可以以任何方式改进吗?
答案 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倍。