r - 将复杂的 for 循环转换为 lapply/sapply
问题描述
需要将 for 循环转换为 lapply 以减少计算工作,但未能调整 lapply 中的所有 i 标签,因为这是一个漫长的过程
样本:
for (i in 1:76){
tryCatch({
model <- nplr(x = splitlist[[i]]$dose, y = splitlist[[i]]$IC, npars = "all")
.... computation of some variables, then
vdata = data.frame(splitlist[[i]]$dose, splitlist[[i]]$viability, splitlist[[i]]$IC)
进一步计算分配给 i 的变量
然后:
path = paste0(dir_path,"/results/Patient/",input$txt,"/combined_plots/",titleframe[i, ],".png", sep ="")
}
...ETC
解决方案
您可以尝试编写一个执行您的操作的函数,然后lapply
说函数。
前任
complicated_function <- function(df){
tryCatch({
model <- nplr(x = df$dose, y = df$IC, npars = "all")
---stuff ----
out <- stuff
}
然后你可以这样做:
outobject <- lapply(your_data, FUN = complicated_function)
我不知道这是否会让你走上正轨。如果你有一些有代表性的数据,我可以提供更多帮助,但这种方法可能对你有用。
这是一个更完整的例子
# Generate Some Fake Data
library(tidyverse)
create_random_dfs <- function(x){
cats <- sample(LETTERS, size = 10, replace = TRUE)
x1 <- rnorm(10, 0, 1)
x2 <- rnorm(10, 0, 1)
y <- 3*x1 + 1*x2
tibble(cats, x1, x2, y)
}
df <- lapply(1:100, create_random_dfs)
# Custom Function that works for one dataframe
df[[1]]
my_function <- function(input){
fit <- lm(y ~ x1 + x2, data = input)
broom::tidy(fit)
}
lapply(df, my_function)
推荐阅读
- javascript - 加载 HTML 元素时是否可以调用函数?
- vbscript - 在 VBS 中按名称而不是 id 选择项目
- javascript - 如何使用导航请求模式?
- node.js - node.js 中静态文件的 Pah 引用
- reactjs - npm run build 不使用代理
- spring-boot - 使用spring在微服务中进行身份验证
- excel - 删除受保护工作表上的行
- python - JQ 到 Python 的转换
- php - cs-cart 在前端搜索中在哪里设置排序参数?
- angular - Angular 无法从 Google Chrome 上的服务器下载大于 10MB 的文件