dplyr :: mutate()的工作方式与plyr :: mutate()相同,类似于base :: transform() . mutate()和transform()之间的关键区别在于mutate允许您引用刚刚创建的列 . - dplyr简介
dplyr
和 plyr
中的 mutate
函数之间存在一些差异 . 主要的区别当然是 plyr::mutate
可以应用于 list
并且 dplyr::mutate
更快 .
此外,当引用刚刚创建的列时, plyr
无法再次重新分配它们,但 dplyr
确实如此 .
# creating a temporary variable and removing it later
plyr::mutate(data.frame(a = 2), tmp = a, c = a*tmp, tmp = NULL)
## a tmp c
## 1 2 2 4
dplyr::mutate(data.frame(a = 2), tmp = a, c = a*tmp, tmp = NULL)
## a c
## 1 2 4
# creating a temporery variable and changing it later
plyr::mutate(data.frame(a = 2), b = a, c = a*b, b = 1)
## a b c
## 1 2 2 4
dplyr::mutate(data.frame(a = 2), b = a, c = a*b, b = 1)
## a b c
## 1 2 1 4
现在我正在为 list
对象寻找 dplyr
mutate
函数的功能 . 所以我正在寻找一个改变 list
的函数,并且可以重新分配刚创建的变量 .
plyr::mutate(list(a = 2), b = a, c = a*b, b = 1)
## $a
## [1] 2
##
## $b
## [1] 2
##
## $c
## [1] 4
dplyr::mutate(list(a = 2), b = a, c = a*b, b = 1)
## Error in UseMethod("mutate_") :
## no applicable method for 'mutate_' applied to an object of class "list"
desired_mutate(list(a = 2), b = a, c = a*b, b = 1)
## $a
## [1] 2
##
## $b
## [1] 1
##
## $c
## [1] 4
我意识到在这个简单的例子中,我可以使用
plyr::mutate(list(a = 2), c = {b = a; a*b})
但在我的实际用例中,我将随机数分配给临时变量,并希望之后将其删除 . 类似于以下内容:
desired_mutate(list(a = c(1, 2, 5, 2)),
tmp = runif(length(a)),
b = tmp * a,
c = tmp + a,
tmp = NULL)
1 回答
更正
mutate
函数中的原始for
循环(使用cols位置而不是名称):测试: