R data.table将函数应用于使用列作为参数的行,该参数返回向量(即多个值)

R data.table将函数应用于使用列作为参数的行,该参数返回向量(即多个值),r,data.table,R,Data.table,假设我有下面的数据- library(data.table) x = structure(list(f1 = 1:3, f2 = 3:5), .Names = c("f1", "f2"), row.names = c(NA, -3L), class = c("data.table", "data.frame")) 现在我想对每一行应用下面的函数- func.text <- function(arg1,arg2){ return(c(10, arg1 + exp(arg2)))} 但是,

假设我有下面的数据-

library(data.table)
x = structure(list(f1 = 1:3, f2 = 3:5), .Names = c("f1", "f2"), row.names = c(NA, -3L), class = c("data.table", "data.frame"))
现在我想对每一行应用下面的函数-

func.text <- function(arg1,arg2){ return(c(10, arg1 + exp(arg2)))}
但是,我希望在最终结果中获得2个额外的列,因为此函数返回2个值,与原始data.table的行数相同


有什么方法可以做到这一点吗?

对您的原始想法进行最小的更改:

  • 使函数返回一个列表和
  • 使用
    :=


func.text感谢您的回复。还有一个问题。假设data.table的所有列都是数值的,我们可以将整行作为向量传递,而不是将参数作为data.table列的名称传递。my original data.table的列名是可变的,因此会不断更改。所以我尽量避免通过专栏names@Bogaso是的,你很容易做到。
> x[, func.text(f1, f2), by = seq_len(nrow(x))]
   seq_len        V1
1:       1  10.00000
2:       1  21.08554
3:       2  10.00000
4:       2  56.59815
5:       3  10.00000
6:       3 151.41316
func.text <- function(arg1,arg2){ return(list(10, arg1 + exp(arg2)))}
x[, c("var1", "var2") := func.text(f1, f2), by = seq_len(nrow(x))]
x

   f1 f2      var2 var1
1:  1  3  21.08554   10
2:  2  4  56.59815   10
3:  3  5 151.41316   10