r - 使用 for 循环在多个变量上迭代函数
问题描述
我有一个看起来像这样的数据表,我想应用到它的功能f
library(data.table)
dt <- data.table(id= c(1,1,1,2,2,2,3,3,3), year=c(1,2,3,1,2,3,1,2,3),y = rnorm(9), x1 = rnorm(9), x2 = c(0,0,0,0,1,0,1,1,1),c2 = rnorm(9))
f <- function(data, var1, var2){
data[,(paste("times",var1,var2, sep = "_")) := get(var1)*get(var2)]
}
我想应用f
多个变量获得类似于以下结果的结果:
vars<-c("x1","x2","c2")
dt2<-lapply(vars, function(x) f(dt,"y", x))
dt2<-do.call(rbind,dt2)
我想使用for 循环而不是获得相同的结果lapply
,不幸的是,我不擅长循环。有人可以帮我吗?到目前为止,我尝试了以下方法,但它不能正常工作。
for(i in vars) {
dt<-f(dt,"y",i)
}
非常感谢您的帮助
解决方案
可能有更好的方法来解决这个问题,但由于我们对确切问题的性质知之甚少,这里是一个for
循环尝试,它重现与lapply
.
library(data.table)
list_df <- vector('list', length(vars))
for(i in seq_along(vars)) list_df[[i]] <- f(dt,'y',vars[i])
rbindlist(list_df)
# id year y x1 x2 c2 times_y_x1 times_y_x2 times_y_c2
# 1: 1 1 -0.5605 -0.446 0 0.701 0.2498 0.000 -0.3931
# 2: 1 2 -0.2302 1.224 0 -0.473 -0.2818 0.000 0.1088
# 3: 1 3 1.5587 0.360 0 -1.068 0.5608 0.000 -1.6644
# 4: 2 1 0.0705 0.401 0 -0.218 0.0283 0.000 -0.0154
# 5: 2 2 0.1293 0.111 1 -1.026 0.0143 0.129 -0.1326
# 6: 2 3 1.7151 -0.556 0 -0.729 -0.9533 0.000 -1.2501
#...
#...
推荐阅读
- node.js - 如果在 package.json 中不满足依赖关系,项目为什么仍然运行和构建?
- opencv - 本质分解的稳定翻译
- javascript - 如何使用 JavaScript 在点击时突出显示元素?
- javascript - 如何使用 Python 从 cdnjs 下载完整的项目结构
- jquery - JQuery 小部件和 Chrome 检查器
- javascript - 如何在这个基于数学的 JavaScript 函数中添加第二个变量?
- php - PHPUnit:测试一个函数是否只被调用一次
- php - PHP - 如何计算第二个 foreach 循环的值?
- swift - SwiftUI - 从核心数据 NSSet 中删除 - 带有 .onDelete() 的 @FetchRequest
- c++ - 对给定范围内的倍数求和