Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 条件测试后列表中数据帧的多个绘图_R_Loops_Lapply - Fatal编程技术网

R 条件测试后列表中数据帧的多个绘图

R 条件测试后列表中数据帧的多个绘图,r,loops,lapply,R,Loops,Lapply,我在将函数应用于数据帧列表时遇到了一个棘手的问题。最后,我想为药物使用数据的大数据集绘制单独的时间序列图 我的数据集包括30种不同的抗生素,其使用率在5年内每月收集一次。它有3列和1692行 到目前为止,我已经为每个抗生素类列出了一个单独的数据帧列表。(列表名称为drug,drug.class是原始数据框中药物名称的字符向量) 在绘制每个图之前,将执行逻辑测试,以确定时间序列是否具有自相关性。列表中的数据长度非常长。 我编写了一个函数来执行测试,如下所示: acTest <- functi

我在将函数应用于数据帧列表时遇到了一个棘手的问题。最后,我想为药物使用数据的大数据集绘制单独的时间序列图

我的数据集包括30种不同的抗生素,其使用率在5年内每月收集一次。它有3列和1692行

到目前为止,我已经为每个抗生素类列出了一个单独的数据帧列表。(列表名称为drug,drug.class是原始数据框中药物名称的字符向量)

在绘制每个图之前,将执行逻辑测试,以确定时间序列是否具有自相关性。列表中的数据长度非常长。 我编写了一个函数来执行测试,如下所示:

acTest <- function(){
    id<-ts(1:length(DateA))
    a1<-ts(Usage)
    a2<-lag(a1-1)
    tg<-ts.union(a1,id,a2)
    mg<-lm(a1~a2+bs(id,df=3), data=tg)
    a2Pval <- summary(mg)$coefficients[2, 4]
    if (a2Pval<=0.05) {
        TRUE
    } else {
        FALSE
    }
}
acTest一些建议:

更改
acTest
函数,使其实际接受data.frame作为参数。否则,在全局环境中查找(和修改)名为DateA的对象和用法时,函数会遇到很多问题

acTest <- function(dat){
    id<-ts(1:length(dat$DateA))
    a1<-ts(dat$Usage)
    a2<-lag(a1-1)
    tg<-ts.union(a1,id,a2)
    mg<-lm(a1~a2+bs(id,df=3), data=tg)
    a2Pval <- summary(mg)$coefficients[2, 4]
    if (a2Pval<=0.05) {
        TRUE
    } else {
        FALSE
    }
}
最后,您可以使用诸如
ddply
(除其他外)之类的工具来执行类似这样的任务,而无需将每个数据帧存储为单独的列表元素。这些工具使用一个变量拆分数据帧,对每个数据帧应用一个函数,然后将它们重新组装到单个数据帧中。在您的情况下,这看起来像:

ddply(AB,.(Drug),.fun = acTest)
一些建议:

更改
acTest
函数,使其实际接受data.frame作为参数。否则,在全局环境中查找(和修改)名为DateA的对象和用法时,函数会遇到很多问题

acTest <- function(dat){
    id<-ts(1:length(dat$DateA))
    a1<-ts(dat$Usage)
    a2<-lag(a1-1)
    tg<-ts.union(a1,id,a2)
    mg<-lm(a1~a2+bs(id,df=3), data=tg)
    a2Pval <- summary(mg)$coefficients[2, 4]
    if (a2Pval<=0.05) {
        TRUE
    } else {
        FALSE
    }
}
最后,您可以使用诸如
ddply
(除其他外)之类的工具来执行类似这样的任务,而无需将每个数据帧存储为单独的列表元素。这些工具使用一个变量拆分数据帧,对每个数据帧应用一个函数,然后将它们重新组装到单个数据帧中。在您的情况下,这看起来像:

ddply(AB,.(Drug),.fun = acTest)

谢谢乔兰。很好用,谢谢你,乔兰。工作完美。
ddply(AB,.(Drug),.fun = acTest)