在 sappply 中使用自定义函数

问题描述 投票:0回答:1

我编写了一个非常基本的函数,可以根据 2 个均值和 2 个均值标准误差 (SEM) 计算 Cohen's d 效应大小。它只是将平均值的差异除以汇总标准差(通过乘以 n 的平方根从 SEM 获得)

effect_size <- function(n, mean1, mean2, sem1, sem2){
  a <- diff(c(mean1, mean2))/
    ((sqrt(n)*sem1)+(sqrt(n)*sem2))/2
  return(a)
}

该函数适用于以下代码:

effect_size(6, 1.40285, 1.439808, 0.750384, 0.73885)

effect_size(6, try$pbs_m[1], try$nm_m[1], try$pbs_sem[1], try$nm_sem[1])
effect_size(6, try$pbs_m[2], try$nm_m[2], try$pbs_sem[2], try$nm_sem[2])
effect_size(6, try$pbs_m[3], try$nm_m[3], try$pbs_sem[3], try$nm_sem[3])
effect_size(6, try$pbs_m[4], try$nm_m[4], try$pbs_sem[4], try$nm_sem[4])
effect_size(6, try$pbs_m[5], try$nm_m[5], try$pbs_sem[5], try$nm_sem[5])
effect_size(6, try$pbs_m[6], try$nm_m[6], try$pbs_sem[6], try$nm_sem[6])
effect_size(6, try$pbs_m[7], try$nm_m[7], try$pbs_sem[7], try$nm_sem[7])
effect_size(6, try$pbs_m[8], try$nm_m[8], try$pbs_sem[8], try$nm_sem[8])
effect_size(6, try$pbs_m[9], try$nm_m[9], try$pbs_sem[9], try$nm_sem[9])
effect_size(6, try$pbs_m[10], try$nm_m[10], try$pbs_sem[10], try$nm_sem[10])

但是当我尝试添加它来提供它时,它失败了,并且一个名为 try 的 df 看起来像:

      X    pbs_m  pbs_sem     nm_m   nm_sem
1  TNFα 1.402850 0.750384 1.439808 0.738850
2   IL6 0.781183 0.951991 2.687149 2.148349
3  IFNγ 1.267959 0.787331 1.630742 1.700653
4 SNAI1 1.328036 0.915758 0.684646 0.713751
5 SNAI2 0.876023 0.946581 0.321736 0.240060
6 SNAI3 1.124685 1.226003 0.706217 0.969728

sapply(try, FUN = effect_size(6, try$pbs_m, try$nm_m, try$pbs_sem, try$nm_sem))

我收到此错误:

match.fun(FUN) 中的错误: 'effect_size(6, try$pbs_m, try$nm_m, try$pbs_sem, try$nm_sem)' 不是函数、字符或符号 另外:警告消息: 在 diff(c(mean1,mean2))/((sqrt(n) * sem1) + (sqrt(n) * sem2)) 中: 较长物体长度不是较短物体长度的倍数

请问有人可以帮忙吗? df 列的长度相同,并且似乎与 [] 索引一起运行得很好

r function sapply
1个回答
0
投票

使用

apply
逐行,然后放回数据框中

data.frame(X = try[,1], 
           res = apply(try[,-1], 1, \(x) 
             effect_size(6, x["pbs_m"], x["nm_m"], x["pbs_sem"], x["nm_sem"])))
      X          res
1  TNFα  0.005065705
2   IL6  0.125487424
3  IFNγ  0.029764166
4 SNAI1 -0.080595709
5 SNAI2 -0.095347590
6 SNAI3 -0.038902499
© www.soinside.com 2019 - 2024. All rights reserved.