>>> [(x*y) for (x,y) in zip(range(3), (1,11,111))]
[0, 11, 222]

不是这样
> data.frame(0:2,c(1,11,111))
  X0.2 c.1..11..111.
1    0             1
2    1            11
3    2           111
> data.frame(0:2,c(1,11,111))->a
> a[1]*a[2]
  X0.2
1    0
2   11
3  222

但像这样
lapply(a, function(x)
{   ...how can I access here the parameters of x?
    (not using x[1] or x[2])
}

最佳答案

对于一般模式,也许

Map(`*`, 0:2, c(1, 11, 111))

或者
unlist(Map(`*`, 0:2, c(1, 11, 111)))

或更明确地
Map(function(x, y) x*y, 0:2, c(1, 11, 111))

(我比 Steve 的 Map 更喜欢 mapply ,因为它默认不简化,打字更短,并且可以很好地与手册页上记录的其他功能函数配合使用,例如 ReduceFilterNegate )。

由于删除了特定问题的早期答案,它只是 0:2 * c(1, 11, 111) ,这会更有效率。

关于python - 用 R 重写这个列表理解,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8745972/

10-12 19:59