【发布时间】:2019-03-31 12:39:07
【问题描述】:
我有一个保存在“survieF.csv”中的值列表,如下所示: 第一行包含以年为单位的时间(1 年、3 年、5 年和 10 年),第二行包含第一列中的变量名称和剩余 4 列中的存活率。
1 3 5 10
var1 0.9 0.85 0.83 0.81
var2 0.87 0.86 0.84 0.81
var3 0.79 0.77 0.75 0.72
survieF<-read.csv("SurvieF.csv", sep=";", dec=".", header=TRUE)
例如,在下面给出的代码中,
S<-survieF[3,2:5]
x<-c(1,3,5,10)
功能:
f <- function(ab){
a <- ab[1]
b <- ab[2]
return(sum((exp(a*x**b)-S)**2))
}
使用 nlm 函数查找最小化总和的参数:
minim <- nlm(f,p=c(1,0))
ab <- minim$estimate
a_opt <- ab[1]
b_opt <- ab[2]
使用最优参数获取值:
prediction_exp <- function(x){
return(exp(a_opt*x**b_opt))}
然后我使用这些参数来估计 1 到 20 年的存活率。
survieFcan<-prediction_exp(1:20)
但是,我希望能够在我的数据框“survieF”的每一行上自动运行代码,然后在 Excel 上导出从第 1 年到第 20 年估计的所有值。我怎样才能做到这一点?
【问题讨论】:
-
几个 cmets:(i) 如果您的 CSV 文件包含您在顶部显示的数据(即 2 行以分号分隔的值,其中值位于第一行,并且值在第二行),您不会将 values 读入
survieF,因为默认情况下read.csv()中的header=TRUE和值将被读取为列names我>; (ii) 创建S的循环的目的是什么?S的值分配给n行,因为它在每次迭代时都会被覆盖... -
你好。我已经编辑了我的问题。我实际上想在我的数据帧的每一行上运行代码,因此在 S.. 上循环。