首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >R data.table将函数应用于使用列作为参数的行

R data.table将函数应用于使用列作为参数的行
EN

Stack Overflow用户
提问于 2014-08-22 00:26:01
回答 3查看 36K关注 0票数 32

我有以下data.table

代码语言:javascript
复制
x = structure(list(f1 = 1:3, f2 = 3:5), .Names = c("f1", "f2"), row.names = c(NA, -3L), class = c("data.table", "data.frame"))

我想对data.table的每一行应用一个函数。函数func.test使用args、f1f2,并对其执行某些操作并返回计算值。假设(作为示例)

代码语言:javascript
复制
func.text <- function(arg1,arg2){ return(arg1 + exp(arg2))}

但我的实际函数要复杂得多,它执行循环和所有操作,但返回一个计算值。实现这一目标的最佳方法是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-08-22 01:03:01

最好的方法是编写一个矢量化的函数,但是如果你不能,那么也许这就行了:

代码语言:javascript
复制
x[, func.text(f1, f2), by = seq_len(nrow(x))]
票数 50
EN

Stack Overflow用户

发布于 2017-04-14 01:59:07

我所发现的最优雅的方式是使用mapply

代码语言:javascript
复制
x[, value := mapply(func.text, f1, f2)]
x
#    f1 f2    value
# 1:  1  3 21.08554
# 2:  2  4 56.59815
# 3:  3  5 151.4132

或者使用purrr包:

代码语言:javascript
复制
x[, value := purrr::pmap(.(f1, f2), func.text)]
票数 26
EN

Stack Overflow用户

发布于 2015-09-24 19:33:42

我们可以用.I函数定义行。

代码语言:javascript
复制
dt_iris <- data.table(iris)
dt_iris[, ..I := .I]

## Let's define some function
some_fun <- function(dtX) {
    print('hello')
    return(dtX[, Sepal.Length / Sepal.Width])
}

## by row
dt_iris[, some_fun(.SD), by = ..I] # or simply: dt_iris[, some_fun(.SD), by = .I]

## vectorized calculation
some_fun(dt_iris) 
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25431307

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档