用户定义的函数在两个数据集之间进行 t 检验
User defined function to do t-tests between two datasets
我是一个新用户,正在尝试弄清楚 lapply
。
我有两个数据集,每个数据集都有相同的 30 个变量,我正在尝试 运行 t 检验来比较每个样本中的变量。我的理想结果是 table 列出每个变量以及两个数据集之间该变量差异的 t 统计量和 p 值。
我试图设计一个函数来做t检验,这样我就可以使用lapply
。这是我的代码和一个可重现的例子。
height<-c(2,3,4,2,3,4,5,6)
weight<-c(3,4,5,7,8,9,5,6)
location<-c(0,1,1,1,0,0,0,1)
data_test<-cbind(height,weight,location)
data_north<-subset(data_test,location==0)
data_south<-subset(data_test,location==1)
variables<-colnames(data_test)
compare_t_tests<-function(x){
model<-t.test(data_south[[x]], data_north[[x]], na.rm=TRUE)
return(summary(model[["t"]]), summary(model[["p-value"]]))
}
compare_t_tests(height)
得到错误:
Error in data_south[[x]] : attempt to select more than one element
我的计划是像这样使用 lapply
中的函数,一旦我弄明白了。
lapply(variables, compare_t_tests)
如果有任何建议,我将不胜感激。在我看来,我可能甚至都没有看到这个权利,所以也欢迎重定向!
你非常接近。只有一些调整:
数据:
height <- c(2,3,4,2,3,4,5,6)
weight <- c(3,4,5,7,8,9,5,6)
location <- c(0,1,1,1,0,0,0,1)
使用data.frame
而不是cbind
得到一个实名的数据框...
data_test <- data.frame(height,weight,location)
data_north <- subset(data_test,location==0)
data_south <- subset(data_test,location==1)
不要在变量集中包含 location
...
variables <- colnames(data_test)[1:2] ## skip location
使用模型,而不是摘要; return 一个向量
compare_t_tests<-function(x){
model <- t.test(data_south[[x]], data_north[[x]], na.rm=TRUE)
unlist(model[c("statistic","p.value")])
}
与引号中的变量比较,不是原始符号:
compare_t_tests("height")
## statistic.t p.value
## 0.2335497 0.8236578
使用 sapply
会自动将结果折叠成 table:
sapply(variables,compare_t_tests)
## height weight
## statistic.t 0.2335497 -0.4931970
## p.value 0.8236578 0.6462352
如果您愿意,可以转置此 (t()
) ...
我是一个新用户,正在尝试弄清楚 lapply
。
我有两个数据集,每个数据集都有相同的 30 个变量,我正在尝试 运行 t 检验来比较每个样本中的变量。我的理想结果是 table 列出每个变量以及两个数据集之间该变量差异的 t 统计量和 p 值。
我试图设计一个函数来做t检验,这样我就可以使用lapply
。这是我的代码和一个可重现的例子。
height<-c(2,3,4,2,3,4,5,6)
weight<-c(3,4,5,7,8,9,5,6)
location<-c(0,1,1,1,0,0,0,1)
data_test<-cbind(height,weight,location)
data_north<-subset(data_test,location==0)
data_south<-subset(data_test,location==1)
variables<-colnames(data_test)
compare_t_tests<-function(x){
model<-t.test(data_south[[x]], data_north[[x]], na.rm=TRUE)
return(summary(model[["t"]]), summary(model[["p-value"]]))
}
compare_t_tests(height)
得到错误:
Error in data_south[[x]] : attempt to select more than one element
我的计划是像这样使用 lapply
中的函数,一旦我弄明白了。
lapply(variables, compare_t_tests)
如果有任何建议,我将不胜感激。在我看来,我可能甚至都没有看到这个权利,所以也欢迎重定向!
你非常接近。只有一些调整:
数据:
height <- c(2,3,4,2,3,4,5,6)
weight <- c(3,4,5,7,8,9,5,6)
location <- c(0,1,1,1,0,0,0,1)
使用data.frame
而不是cbind
得到一个实名的数据框...
data_test <- data.frame(height,weight,location)
data_north <- subset(data_test,location==0)
data_south <- subset(data_test,location==1)
不要在变量集中包含 location
...
variables <- colnames(data_test)[1:2] ## skip location
使用模型,而不是摘要; return 一个向量
compare_t_tests<-function(x){
model <- t.test(data_south[[x]], data_north[[x]], na.rm=TRUE)
unlist(model[c("statistic","p.value")])
}
与引号中的变量比较,不是原始符号:
compare_t_tests("height")
## statistic.t p.value
## 0.2335497 0.8236578
使用 sapply
会自动将结果折叠成 table:
sapply(variables,compare_t_tests)
## height weight
## statistic.t 0.2335497 -0.4931970
## p.value 0.8236578 0.6462352
如果您愿意,可以转置此 (t()
) ...