我有一个数据框,
SNP1 <- c("AA","GG","AG")
SNP2 <- c("AA","CC","AC")
SNP3 <- c("GG","AA","AG")
df<- data.frame(SNP1, SNP2, SNP3)
colnames(df)<- c('rs10000438', 'rs10000500','rs1000055')
使用此数据框df
,我想将函数dominant_dummy
应用于每列。我使用apply
函数,但我发现对于apply
函数,当它遍历dataframe
的列时,它只提取此列值的vector
,不包括该列的名称。但是在函数dominant_dummy
中,它需要具有此语法NCBI_snp_query(names(x))
的列的名称。我怎样才能使用apply
函数同时提取name of the column
函数只是循环?
library(rsnps)
dominant_dummy<- function(x){
SNP_lib<- NCBI_snp_query(names(x))
NCBI_snp_query(names(x))
SNP_min<- SNP_lib$Minor
SNP_name<- SNP_lib$Query
SNPs=as.character(x)
SNPs=as.factor(SNPs)
check<-substr(levels(SNPs)[2],1,1)==SNP_min
if(!check){
levels(SNPs)<-c(0,1,1)
SNPs<-as.numeric(as.character(SNP))
}else {levels(SNPs)<-c(1,1,0)
SNPs<-as.numeric(as.character(SNP))}
}
df_3levels<-apply(df,2, dominant_dummy)
答案 0 :(得分:4)
如果您需要名称,此功能将无法与apply
一起使用。由于您基本上需要传入data.frame,因此您将不得不手动进行切片(假设您不想更改dominant_dummy
)
df_3levels<-sapply(1:ncol(df), function(i) dominant_dummy(df[,i, drop=FALSE]))