微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在R中使用cbin时的警告消息

如何解决在R中使用cbin时的警告消息

我具有与供血者和接受者的血型相匹配的功能(接受者A->供者A或O; 收件人B --->捐赠人B或O; 收件人O --->捐助方O; 收件人AB --->捐助者A,B,O或AB)。即使得到了期望的输出,我仍然收到警告消息。

1-这是我的数据

######################
#  Sample data       #
######################
# sample data for recipients

IDr= c(seq(1,5))
BTR=c("A","B","AB","O","O")
data_R=data.frame(IDr,BTR,A=c(0,1,rep(0,3)),B=c(0,3),1),C=c(0,rep(1,0),D=c(0,4)),E=c(1,stringsAsFactors=FALSE)

data_R
  IDr BTR A B C D E
1   1   A 0 0 0 0 1
2   2   B 1 0 1 1 1
3   3  AB 0 0 1 1 0
4   4   O 0 0 1 1 1
5   5   O 0 1 0 1 0

# sample data for donors

IDd= c(seq(1,8))
BTD= c("A","O")
fg= c(rep(0.0025,each=2),rep(0.00125,rep(0.0011,rep(0.0015,each=2))
data_D=data.frame(IDd,BTD,A=c(rep(0,5),B=c(rep(0,6),C=c(rep(1,7),D=rep(1,8),E=c(rep(0,2),fg,stringsAsFactors=FALSE)

# i ordered my data_D
data_D
  IDd BTD A B C D E      fg
2   2   A 0 0 1 1 0 0.00250
4   4  AB 0 0 1 1 0 0.00125
5   5   B 0 0 1 1 0 0.00110
6   6   O 0 0 1 1 0 0.00110
7   7  AB 0 0 1 1 0 0.00150
8   8  AB 1 0 1 1 1 0.00150
1   1   O 1 1 0 1 0 0.00250
3   3   O 1 1 1 1 1 0.00125

2-这是与血液类型匹配的功能

# my function
  ftest=function(i){
    if(data_R[i,2]=="A"){
      tab=as.data.frame(cbind(data_R[i,1:2],data_D[which((data_D[2]=="A") | (data_D[2]=="O")),][,1:2]))
    }else if(data_R[i,2]=="B"){
      tab=as.data.frame(cbind(data_R[i,data_D[which((data_D[2]=="B") | (data_D[2]=="O")),2]=="O"){
      tab=as.data.frame(cbind(data_R[i,data_D[which (data_D[2]=="O"),1:2]))
    }else{
      tab=as.data.frame(cbind(data_R[i,data_D[,1:2]))
    }
   return(tab)
  }

#  output
 ftest(1)
  IDr BTR IDd BTD
1   1   A   2   A
2   1   A   6   O
3   1   A   1   O
4   1   A   3   O

# Warning message:
# In data.frame(...,check.names = FALSE) :
#  row names were found from a short variable and have been discarded

您是否知道如何避免此警告消息?任何建议将不胜感激。

谢谢。

解决方法

嘿,我认为您应该在cbind中尝试row.names = NULL。这是您代码中的示例

tab=as.data.frame(cbind(data_R[i,1:2],data_D[,row.names = NULL))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。