生活,有时候就需要些技巧~

使用 nomogram 绘制列线图时,有个参数fun,输入计算特定时间点的生存函数,如果是多个时间点的话,则使用列表形式:

If more than one transformation is plotted, put them in a list, e.g. list(function(x)x/2,function(x)2*x).

如计算

surv = Survival(fit) # 生存函数

surv1 = function(x) surv(1*365, lp=x) # 1年生存

surv2 = function(x) surv(3*365, lp=x) # 3年生存

surv3 = function(x) surv(5*365, lp=x) # 5年生存

对应的参数 funlabel 用于设置显示,此时就是:

nomogram(fit, fun = list(surv1, surv2, surv3),

funlabel = c("1-year Survival Probability",

"3-year Survival Probability",

"5-year Survival Probability"),...)

没任何问题,除了...我觉得代码有些高度重复。因为,真正需要改变的仅仅是时间点的值而已,故可以将其作为 lapply() 的参数,返回列表即可!

对此,funlabel 比较容易:

times = c(1,3,5)

labels = lapply(times, function(time) paste0(time, "-year Survival Probability"))

难点在于参数 fun,因为其输入是函数对象或函数对象构成的列表:

class(surv1)

[1] "function"

所以需要把 paste0返回的字符串转换为 function 对象,可以使用 eval 搭配 parse 函数:

func = lapply(times, function(time) eval(parse(text = paste0("function(x) surv(", time, "*365, x)"))))

综上, nomogram 命令改成如下即可:

nomogram(fit, fun = funcs, funlabel = labels,...)

当然,这么做的好处并不仅仅在于装B,而是:

1、设置多个时间点时,可以极大地避免代码冗余

2、可以更方便的设置时间点。如果设置的时间点超出了最长生存时间,就会报错:

Error in approx(fu[s], xseq[s], fat, ties = mean) :

need at least two non-NA values to interpolate

此时,就不需要在代码中寻找并更改N次时间值,只需要修改上示times变量即可!

3、进一步地, lapply 的方式有利于根据输入的生存时间,自行判断时间值的取值范围并作出调整,避免在程序执行中报错!

R系列·往期精彩

R技巧 | 如果一句命令就能解决,为什么还要三句?

R语言 | 如果你再问我怎么安装R包

数据挖掘 | 快速实现生存分析森林图

r 函数返回多个值_R 技巧 | 绘制nomogram列线图的细节优化相关推荐

  1. r 函数返回多个值_R语言:广义估计方程(GEE)

    01 解决何种问题 在临床研究中,经常会比较两种治疗方式对患者结局的影响,并且多次测量结局.例如为了研究两种降血糖药对血糖的控制结果是否存在差异,研究者会在两组人群服药后不同的时间点记录血糖值,然后评 ...

  2. r 函数返回多个值_第四讲 R描述性统计分析

    在"R与生物统计专题"中,我们会从介绍R的基本知识展开到生物统计原理及其在R中的实现.以从浅入深,层层递进的形式在投必得医学公众号更新. 在上一讲中,我们介绍了第三讲 R编程基础- ...

  3. c++中函数放在等号右边_如何从C或C++中的函数返回多个值?

    新程序员通常在寻找从函数返回多个值的方法.不幸的是,C和C++不允许直接这样做.但是幸运的是,通过一些巧妙的编程,我们可以轻松实现这一目标. 下面是从C函数中返回多个值的方法: 通过使用指针. 通过使 ...

  4. Python学习之函数返回多个值

    Python学习之函数返回多个值 问题的引出 Python中,一个函数能不能一次返回多个值? 在C语言中,函数最多返回一个值,如果要返回多个值,可以把这些值封装在一个结构体中.注意,C语言不允许函数返 ...

  5. Android JNI编程(三)——C语言指针的初步认识、指针变量、互换两个数、函数返回多个值...

    版权声明:本文出自阿钟的博客,转载请注明出处:http://blog.csdn.net/a_zhon/. 目录(?)[+] 一.什么是指针? 简单来说: 指针就是内存地址      内存地址就是指针. ...

  6. python学习笔记-day6-函数的延续【汉字转拼音模块,函数返回多个值,匿名函数,列表生成式,generator生成器,三元运算符】...

    继续来说函数的后续知识点,主要是函数返回多个值,匿名函数,三元运算符,算是比较小的知识点. 一.汉字转拼音模的使用 1.安装模块 #install xpinyin 2.如果使用 结果: 二.函数返回多 ...

  7. python函数返回多个值_python函数返回多个值的示例方法

    python可以返回多个值,确实挺方便 函数里的return只能返回一个值,但是返回类型是没是限制的 因此,我们可以"返回一个 tuple类型,来间接达到返回多个值". 例子是我在 ...

  8. Java中如何实现一个函数返回多个值

    由于java中没有指针,不能像C++一样通过指针的方式实现一个函数返回多个值,因此在java中必须采用变通的方式解决,常用的方式有以下几种: 1.封装一个实体类,将要返回的值封装进去: 2.通过map ...

  9. C语言通过指针间接的实现函数返回多个值

    C语言通过指针间接的实现函数返回多个值 本例题中通过把指针作为函数参数来传递,依次达到改变变量的值的目的,最后实现一个函数返回两个变量的值 int *X,*X应该被看成一个整体来看,表示一个整形. # ...

最新文章

  1. 不知道发这些有啥用!多分享些技术噻...
  2. 修改某个用户名和密码
  3. 2015年第六届蓝桥杯本科B组C++省赛个人题解
  4. Axure高保真家政服务用户端app全局说明+家政服务员工移动端app+家政服务web端管理信息系统(订单管理+服务管理+报表统计+财务管理+营销管理+人员管理)
  5. 31 款轻量高效的开源 JavaScript 插件和库
  6. 这10道大厂Java面试题,我敢打赌90%的人都不会!!!
  7. 银监计算机类 考试题库,银监会(计算机类)笔试资料-微观经济学试题库 .doc...
  8. reactbootstrap php,什么是React-Bootstrap
  9. linux unzip命令
  10. 如何自主搭建信息管理系统
  11. Could not find module ‘xxx‘ for target ‘xxx‘; found: i386, x86_64-apple-ios-simula错误解决
  12. matlab 科研绘图
  13. Spring事务管理A方法内部调用B方法的回滚问题(springboot事务管理)
  14. linux防火墙_专业的linux web应用防火墙国内排名推荐
  15. Xmind进阶教程:配色指南
  16. Numpy计算三角函数
  17. Android获取手机序列号
  18. js判断密码是否包含数字、大写字母、小写字母、特殊符号
  19. matlab中cell是什么意思,matlab中cell的用法
  20. 编程题——Fibonacci数列

热门文章

  1. Office2003与2007完美共存的办法
  2. springboot获取IP归属地
  3. JAVA实现简易版【斗地主】小游戏
  4. linux下软件安装卸载
  5. springboot+vue+elementUI 智慧外贸商城购物销售管理系统#毕业设计
  6. C# Stream(学习笔记)
  7. android模拟机怎么用,安卓模拟器怎么用?安卓模拟器安装教程
  8. svm预测股价 python_小蛇学python(4)利用SVM预测股票涨跌
  9. k-anonymity匿名算法
  10. 企业究竟会带给员工什么?