【发布时间】:2016-11-18 23:02:41
【问题描述】:
有什么通用的方法可以更快地完成以下 R 代码吗?例如,在 python dict 理解中(参见下面的等效项)将是一个不错的更快的选择。
R:
l1 <- 1:3
l2 <- c("a", "b", "c")
foo <- function(x) {return(5*x)}
bar <- list()
for (i in 1:length(l1)) bar[l2[i]] <- foo(l1[i])
Python
l1 = range(1, 4)
l2 = ["a", "b", "c"]
def foo(x):
return 5*x
{b: foo(a) for a, b in zip(l1, l2)}
【问题讨论】:
-
setNames(lapply(l1,foo),l2). -
如果你不需要它作为一个列表(因为每个元素只有一个数字),你可以使用
sapply而不是lapply。 -
由于乘法(因此
foo)是矢量化的,你可以只做as.list(setNames(l1 * 5, l2))或as.list(setNames(foo(l1), l2));删除as.list以将其保留为命名的数字向量。 -
感谢您的所有回答。
标签: r list list-comprehension dictionary-comprehension