采取以下数据框架和矢量,
df <- data.frame(x = 1:3, y = 4:6, z = 7:9)
v <- c(5, 10, 15)假设我想将df按列乘以v的元素,意思是df[1] * v[1]、df[2] * v[2]和df[3] * v[3]
我可以用Map来做这个
> Map(`*`, df, v)
$x
[1] 5 10 15
$y
[1] 40 50 60
$z
[1] 105 120 135 现在,因为Map被定义为
> Map
function (f, ...)
{
f <- match.fun(f)
mapply(FUN = f, ..., SIMPLIFY = FALSE)
}
<bytecode: 0x3950e00>
<environment: namespace:base>通过下面对mapply的调用,我应该能够准确地再现上面的内容,这似乎是合乎逻辑的,但事实并非如此。
> mapply(`*`, df, v, simplify = FALSE)
# Error in .Primitive("*")(dots[[1L]][[1L]], dots[[2L]][[1L]],
# simplify = dots[[3L]][[1L]]) : operator needs one or two arguments问题似乎在"*"的论点中,而这些论点是
> args("*")
function (e1, e2)
NULL因此,再试两次会产生类似的错误。
> mapply(`*`, e1 = df, e2 = v, simplify = FALSE)
# Error in .Primitive("*")(e1 = dots[[1L]][[1L]], e2 = dots[[2L]][[1L]], :
# operator needs one or two arguments
> mapply(`*`, ..1 = df, ..2 = v, simplify = FALSE)
# Error in .Primitive("*")(..1 = dots[[1L]][[1L]], ..2 = dots[[2L]][[1L]], :
# operator needs one or two arguments这里有什么问题?我如何才能(准确地)复制来自
Map(`*`, df, v)用mapply
发布于 2014-08-15 01:36:33
注意Map调用
mapply(FUN = f, ..., SIMPLIFY = FALSE)而非
mapply(FUN = f, ..., simplify = FALSE)当然,R是区分大小写的。试一试
mapply(`*`, df, v, SIMPLIFY = FALSE)
# $x
# [1] 5 10 15
#
# $y
# [1] 40 50 60
#
# $z
# [1] 105 120 135而不是。使用simplify = FALSE,它试图调用
`*`(df[[1]], v[1], simplify = FALSE)这就是造成这一错误的原因。
https://stackoverflow.com/questions/25320044
复制相似问题