R 创建函数时意外覆盖输出
我是R新手,所以这可能很简单,但我写的函数有一个问题-我需要它返回更新的数据帧,但它返回的是原始数据帧 我在R中创建了一个函数,其中输入是1)空数据帧,R 创建函数时意外覆盖输出,r,function,dataframe,R,Function,Dataframe,我是R新手,所以这可能很简单,但我写的函数有一个问题-我需要它返回更新的数据帧,但它返回的是原始数据帧 我在R中创建了一个函数,其中输入是1)空数据帧,信号(有两列,时间和导入,2)实施天数向量治疗(例如,30、60、90表示在这些天进行治疗)和3)模型拟合,这就产生了一条曲线,显示了治疗是如何随着时间的推移而逐渐消失的。输出是新的数据帧,它使用治疗天数向量将数据从model_fit引入信号$import列和相应的时间 我为我的函数测试了我的每一行代码,它们都正常工作——我的问题是我不知道如何正
信号
(有两列,时间
和导入
,2)实施天数向量治疗(例如,30、60、90表示在这些天进行治疗)和3)模型拟合
,这就产生了一条曲线,显示了治疗是如何随着时间的推移而逐渐消失的。输出是新的数据帧,它使用治疗天数向量将数据从model_fit
引入信号$import列和相应的时间
我为我的函数测试了我的每一行代码,它们都正常工作——我的问题是我不知道如何正确地返回更新后的数据帧。这是我的密码:
#Initial vectors for days post treatment, % killed
x <- c(4, 30, 60, 90, 120, 210, 360) #days post treatment
z <- c(1.0, 0.99, 0.99, 0.79, 0.7, 0.02, 0) #% killed
#create model fit:
fit2 <- nls(z ~ SSlogis(x, Asym, xmid, scal), data = data.frame(x, z))
summary(fit2)
lines(seq(0, 400, length.out = 400),
predict(fit2, newdata = data.frame(x = seq(0.5, 400, length.out = 400))))
# Create function:
trt.function <- function(model_fit, vector_of_trt_days, signal) {
#inputs
times <- seq(0, 20000, by = 1)
signal <- data.frame(times = times, import = rep(0, length(times)))
Asym<-summary(fit2)$parameters[1,1]
xmid<-summary(fit2)$parameters[2,1]
scal<-summary(fit2)$parameters[3,1]
trt.start = vector_of_trt_days
trt.end = c(trt.start + 400)
trt.segments <- unlist(Map(':', trt.start, trt.end))
time.segments <- rep(0:401, times=length(trt.start))
signal$import[trt.segments] = (Asym / (1 + exp((xmid - times[time.segments] / scal))))
return(signal)
}
传递给函数的
信号
和向量天数
是什么?在最后一行代码中,您正在索引时间
,其中索引从0开始。在R
中,索引从1开始如果我在函数中使用out,我得到out,我是说在函数内部,第三行是创建信号信号啊,我明白了。谢谢,主要问题是我完全忘了做你用out显示的内容
#Create empty dataframe
times <- seq(0, 20000, by = 1)
signal <- data.frame(times = times, import = rep(0, length(times)))
# inputs
Asym<-summary(fit2)$parameters[1,1]
xmid<-summary(fit2)$parameters[2,1]
scal<-summary(fit2)$parameters[3,1]
trt.start <- c(10000,10090,10180,10270) #input for start times of treatments
trt.end <- c(trt.start + 400) #input for the end times of treatments
trt.segments <- unlist(Map(':', trt.start, trt.end)) #Create the treatment segments
time.segments <- rep(0:401, times=length(trt.start)) #create the corresponding time segments
signal$import[trt.segments] = (Asym / (1 + exp((xmid - times[time.segments]) / scal)))