在dplyr mutate()中返回一个列表

Ron*_*ich 13 r dplyr data.table

我在我的现实问题中有一个返回列表的函数.有没有办法在dplyr mutate()中使用它?这个玩具示例不起作用 - :

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))
Run Code Online (Sandbox Code Playgroud)

我看到,它是通过在第一"列"函数的输出循环的新变量,但不明白为什么.

谢谢!

Bro*_*ieG 10

data.table使用:=(通过引用赋值)运算符的惯用方法是使用(通过引用赋值)运算符.这是一个例子:

it[, c(paste0("V", 4:5)) := myfun(V2, V3)]
Run Code Online (Sandbox Code Playgroud)

如果你真的想要一个清单,为什么不:

as.list(it[, myfun(V2, V3)])
Run Code Online (Sandbox Code Playgroud)

或者,也许这就是你想要的,但为什么你不只是使用这个data.table功能:

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    
Run Code Online (Sandbox Code Playgroud)

请注意,如果myfun要命名它的输出,那么名称将显示在最终结果列中:

#    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    
Run Code Online (Sandbox Code Playgroud)