我正在运行一个函数来对 Dataframe 的多个子集执行加权双样本t检验。我的代码(使用mtcars数据集)的可复制版本如下:
library(tidyverse)
library(weights)
df_list <- split(mtcars, mtcars$carb)
multiple_wt_ttest <- function(df) {ttest = wtd.t.test(x=subset(df, am == 0)$disp,y=subset(df, am == 1)$disp,
weight=subset(df, am == 0)$wt,weighty=subset(df, am == 1)$wt,samedata=FALSE)
out <<- ttest[2]}
store <- do.call(rbind, sapply(df_list, multiple_wt_ttest))
这产生了一个 Dataframe ,显示了基于变量carb
的mtcar的每个子集的期望t检验。现在,我想重复这一点,不仅仅是为了比较变量disp
,而是为了比较 Dataframe 中的多个变量(例如,在mtcars中,drat
,cyl
,gear
等)。因此,公式如下:
library(tidyverse)
library(weights)
df_list <- split(mtcars, mtcars$carb)
var_list <- list("cyl","drat","disp")
multiple_wt_ttest <- function(df,var) {ttest = wtd.t.test(x=subset(df, am == 0)$var,y=subset(df, am == 1)$var,
weight=subset(df, am == 0)$wt,weighty=subset(df, am == 1)$wt,samedata=FALSE)
out <<- ttest[2]}
store <- do.call(rbind, sapply(df_list,var=var_list, multiple_wt_ttest))
但这不起作用,并产生错误:Error in var(x) : 'x' is NULL
我认为这与原始的sapply
提供了一个 Dataframe 的事实有关,而新的var_list
是一个向量/变量列表。那么,我如何在sapply
函数中合并2个不同的输入,对多个变量(而不是一个变量)的每个数据子集重复这个t检验过程,并在一个表中相邻编译结果?
1条答案
按热度按时间afdcj2ne1#
这里有一个解决方案。
首先,我已经更正了函数,以便它可以科普输入数据。只有一个
am
值的帧,例如只有一行的数据。然后,在变量列表中调用为
lapply
循环中的一个变量运行的代码。创建于2023-05-26带有reprex v2.0.2