700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > r 函数返回多个值_R 技巧 | 绘制nomogram列线图的细节优化

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

时间:2018-08-20 19:24:22

相关推荐

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

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

使用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包

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。