lapply 一个数据框列表的函数,然后 cbind 到相应的数据框

lapply a function to a data frame list and then cbind to corresponding data frame

问题:两个数据框,每个包含三列但行数不同

>view(archae_pro)
motif obs pred
AAB 1189 760.1757
CDD 1058 249.7147
DDE 771 415.1314
FBB 544 226.3529

>view(archae_end)
motif obs pred
ABG 1044 749.4967
GBC 634 564.5753
AGG 616 568.7375
CGG 504 192.5312
BTT 404 200.4589

我想进行卡方拟合优度检验。此外,计算标准化残差并将它们列绑定到相应的数据帧。 我的尝试如下:

df.list <- list (
  df_archae_pro, 
  df_archae_end,
)+

prop <- lapply(df.list, function (x) cbind(x$pred/sum(x$pred)))
chisquare <- lapply(df.list, function(x) chisq.test (x$obs, p=prop))  

Rstudio 抛出一个错误

Error in chisq.test(x$obs, p = prop) : 
'x' and 'p' must have the same number of elements

我的两便士错误:chisq.test 不知何故没有读到与正确 data.frame 对应的“prop”?!

我几天前才开始学习 rstudio,所以请原谅任何明显的错误。

如果能帮助我计算标准化残差并将它们列绑定到数据框,我将不胜感激。

这是一个跟进问题。我如何绘制几何条形图(图案与 stdres)和小平面环绕 1 列和对应于每个数据的多行。我尝试了以下

myplots<-lapply(df.list,function(x)
  p<-ggplot(x,aes(x=motif,y=stdres)) +
    geom_bar(stat="identity") +
    facet_wrap(x)
)
myplots

但是它抛出一个错误,

Error in `[.data.frame`(.subset2(df, col)[1], NA) : 
  undefined columns selected

我做错了什么?

简单地说,将第一个参数添加到 cbind,并在第二个参数上添加新列的命名参数 prop,同时将结果分配回 df.list,因为您正在添加新列每个数据框。

然后,在下一次调用中添加对象限定符 x$prop 以引用测试中的列:

df.list <- lapply(df.list, function(x) 
    cbind(x, prop=x$pred/sum(x$pred))
) 

chisquare <- lapply(df.list, function(x)
    chisq.test(x$obs, p=x$prop)
) 

要分配测试结果,cbind 提取的值:

df.list <- lapply(df.list, function(df) {
    results <- chisq.test(df$obs, p=df$prop)

    cbind(
        df, 
        stat = results$statistic, 
        pval = results$p.value,
        stdres = results$stdres
    )
})