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