R语言中基于trt.start动态生成治疗周期时间向量的方法咨询
解决方案:动态生成治疗完整时间段向量
当然可以!完全不需要硬编码就能实现这个需求,毕竟硬编码会让代码失去灵活性,这里给你两种在R里的常用实现方案,不管trt.start怎么变动,都能自动适配:
方案一:使用基础R的mapply函数
mapply可以对两个向量的对应元素逐一执行操作,非常适合这种配对生成序列的场景:
# 定义起始和结束时间向量 trt.start <- c(10000,10090,10180,10270, 10360) trt.end <- trt.start + 400 # 生成完整时间段并合并为单一向量 full_time_periods <- unlist(mapply(function(start, end) start:end, trt.start, trt.end))
原理说明:
mapply会依次取出trt.start和trt.end的对应元素,传入匿名函数生成从起始到结束的日均序列unlist把生成的多个序列列表合并成一个连续的向量
方案二:使用tidyverse风格的purrr::map2
如果你习惯用tidyverse工具链,purrr包的map2函数更简洁直观:
library(purrr) # 生成完整时间段并合并 full_time_periods <- map2(trt.start, trt.end, `:`) %>% unlist()
原理说明:
map2专门处理两个输入向量的映射操作,这里直接用:作为序列生成的操作符,省去了匿名函数的写法- 管道符
%>%把结果传给unlist完成合并
验证一下结果,打印full_time_periods就能看到和你预期完全一致的向量啦,而且不管后续trt.start的数值怎么修改,这段代码都能自动生成对应的完整时间段,完全不需要修改硬编码的数值~
内容的提问来源于stack exchange,提问作者jrokh
相关产品推荐
相关产品推荐

