1
在上一个问题Return a list in dplyr mutate()中,有人说,虽然dlpyr不能在版本0.2中从函数返回的向量创建新变量,但data.table()可以使用语法 - :使用条件函数在data.table()中分配多列
it[, c(paste0("V", 4:5)) := myfun(V2, V3)]
如果从这个问题的功能myfun
被更改为 - :
myfun = function(arg1,arg2) {
if (arg1 > arg2) {
temp1 = arg1 + arg2
temp2 = arg1 - arg2 }
else {
temp1 = arg1 * arg2
temp2 = arg1/arg2 }
list(temp1,temp2)
}
上面贴的解决方案返回警告 - :
it = data.table(c("a","a","b","b","c"),c(1,2,3,4,5), c(2,3,4,2,2))
it[, c(paste0("V", 4:5)) := myfun(V2, V3)]
Warning message:
In if (arg1 > arg2) { :
the condition has length > 1 and only the first element will be used
这意味着以某种方式data.table()传递多个单行到函数。为什么会发生?
该警告来自您的功能。只要做了myfun(它$ V2,$ V3)'就会发出同样的警告。这是因为您在执行'arg1> arg2'时比较了两个向量(长度> 1)。所以,它只需要第一个值(并提供警告)。 – Arun