我有一个导入R的数据框,如下所示:
location<-
cns random
char1 1 2
not_char1 3 2
char2 7 10
not_char2 5 2
我想在2X2列联表中拆分此数据框,计算Fisher测试并将其作为列表返回:
result=(char1=fisher.test.p.value.char1, char2=fisher.test.p.value.char2)
我写了这样的代码:
location_list=list()
for (item in seq(1,length(rownames(location)),2)){
df<-location[item:(item+1),]
result<-fisher.test(df)
location_list<-c(location_list, rownames(df[1,])=result$p.value}
但它会出现以下错误:
Error in source(".../sd_based/r_data_analysis.R") :
.../sd_based/r_data_analysis.R:11:52: unexpected '='
10: result<-fisher.test(df)
11: location_list<-c(location_list,rownames(df[1,])=
R列表看起来像Python语言字典,这个策略适用于Python,但不适用于此。我很感激,如果有人可以提供帮助的话。
答案 0 :(得分:2)
使用by
split
data.frame
fisher.test
,应用sapply
,然后使用"["
提取"p.value"
,可能会对此产生一些变化您的sapply(by(location,sub("not_","",rownames(location)), fisher.test),"[","p.value")
#$char1.p.value
#[1] 1
#
#$char2.p.value
#[1] 0.3707094
值:
{{1}}