如何使用户定义的函数创建新对象?

时间:2020-05-15 16:23:04

标签: r function functional-programming subset gam

我在下面创建了2个数据帧,例如dat1dat2。 在dat1中,有3个人(ID a:d)属于两个位置(loc1loc2)。 dat2包含对dat1中每个人的单个观察结果,以及我想将idx中的数据子集化的索引(dat1)。

library(tidyverse)
library(mgcv)
dat1 <- data.frame(ID = rep(c("a","b","c","d"), each = 100),
                   location = rep(c("loc1","loc2"), each = 200),
                   distance = rep(c(1:100), times = 4),
                   var1 = rnorm(400))
dat2 <- data.frame(ID = c("a","b","c","d"),
                   idx = c(58,50,67,62))

我正在编写此函数:

working <- 
  function(id){
    x <- dplyr::filter(data, number == id)
    v <- dplyr::filter(IndexData, number == id)
    v <- as.numeric(v[5])
    x <- x[1:v, ]
    x <- mutate(x, idx = row_number())
    edf = 10*(v^(2/9))
    edf = ceiling(edf)
    edf
    Location <- paste(x[1,1])
    modname <- paste(Location,id,"mod", sep="")
    paste(modname) <- gam(x$Var1 ~ s(idx, bs="tp", k=edf), data = x, method = "REML")
    fit.line <- predict(paste(modname), se=T)$fit
    se.line <- predict(paste(modname), se=T)$se.fit
  }

总而言之,我想给函数一个id(即id a),它将在id中查找dat2,得到{{1 }}号与该idx对应(例如,对于ID id,它将是数字58)。该索引定义了我希望对其进行子集a的范围的边界(例如,它将子集dat1中ID为dat1的前58个观察结果的子集)。然后,我希望它创建一个基于子集的aid命名的模型。这是我无法正常工作的地方。因此,例如,对于ID location,它将适合名为a的模型。我希望它实际上将其创建为一个对象,以便我可以查看和使用该模型,但它不喜欢我试图实现此目的的方式。我需要更改什么?

如果这不会变得复杂,我还希望每次我给它Loc1amod时自动生成一个包含原始数据,gam配置文件和置信带的折线图。 / p>

0 个答案:

没有答案