我想在一个函数中添加多个列到data.table,具体取决于其他列中的值。
d.f <- data.frame(a=c(1,2,3),b=c(4,5,1))
d.t <- data.table (d.f)
g <- function(x,y){
if (y>x)
return (list(1,2))
else
return (list(2,1))
}
d.t[,c('x','y'):=g(a,b)]
但是这出错了,使用ifelse似乎也不起作用。
答案 0 :(得分:4)
您应该使用ifelse
代替if (...)
else
。 return语句也应该是长度为2的列表,每个列表元素的长度与x
和y
相同。
g <- function(x,y){
list(ifelse(y>x, 1, 2),
ifelse(y>x, 2, 1))
}