在 dplyr mutate() 中返回一个列表 [英] Return a list in dplyr mutate()
问题描述
我的实际问题中有一个函数可以返回一个列表.有没有办法将它与 dplyr mutate() 一起使用?这个玩具示例不起作用 -:
I have a function in my real-world problem that returns a list. Is there any way to use this with the dplyr mutate()? This toy example doesn't work -:
it = data.table(c("a","a","b","b","c"),c(1,2,3,4,5), c(2,3,4,2,2))
myfun = function(arg1,arg2) {
temp1 = arg1 + arg2
temp2 = arg1 - arg2
list(temp1,temp2)
}
myfun(1,2)
it%.%mutate(new = myfun(V2,V3))
我看到它在 new 变量的第一个列"中循环遍历函数的输出,但不明白为什么.
I see that it is cycling through the output of the function in the first "column" of the new variable, but do not understand why.
谢谢!
推荐答案
使用 data.table
执行此操作的惯用方法是使用 :=
(赋值通过引用)运算符.这是一个插图:
The idiomatic way to do this using data.table
would be to use the :=
(assignment by reference) operator. Here's an illustration:
it[, c(paste0("V", 4:5)) := myfun(V2, V3)]
<小时>
如果你真的想要一个列表,为什么不:
If you really want a list, why not:
as.list(it[, myfun(V2, V3)])
或者,也许这就是您想要的,但您为什么不直接使用 data.table
功能:
Alternatively, maybe this is what you want, but why don't you just use the data.table
functionality:
it[, c(.SD, myfun(V2, V3))]
# V1 V2 V3 V4 V5
# 1: a 1 2 3 -1
# 2: a 2 3 5 -1
# 3: b 3 4 7 -1
# 4: b 4 2 6 2
# 5: c 5 2 7 3
请注意,如果 myfun
将其命名为输出,则名称将显示在最终结果列中:
Note that if myfun
were to name it's output, then the names would show up in the final result columns:
# V1 V2 V3 new.1 new.2
# 1: a 1 2 3 -1
# 2: a 2 3 5 -1
# 3: b 3 4 7 -1
# 4: b 4 2 6 2
# 5: c 5 2 7 3
这篇关于在 dplyr mutate() 中返回一个列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!