我有一个简单的问题,但它花了我几个小时。我想cbind()一个矩阵和一个数据帧。关键是,它们没有相同的长度。
矩阵
条件
[,1]
ILMN_1666845 TRUE
ILMN_1716400是的
Data.frame
一
t1 t2 t3 t4 1 0 1 1 1
如果我使用没有循环的cbind(),一切正常,结果就是这样:
b将-cbind(条件,一个) B'/ P>
condition t1 t2 t3 t4
ILMN_1666845是0 1 1 1
ILMN_1716400是0 1 1 1
但在for循环中我收到以下错误: data.frame(...,check.names = FALSE)出错: 参数意味着不同的行数:0,1
任何人都可以帮助我吗?谢谢!
对于循环代码:
for(p in 1:nrow(outcome)){
id< - apply(可规则,1,函数(i)
总和(我[1:长度(规定)]!=结果[p,])== 0)
IDD及LT; -as.matrix(ID)
condition = subset(idd,idd [,1] == TRUE)
A< -as.data.frame(吨(成果[P,]))
b将-cbind(条件,一个)
write.table(b,“file.txt”,append = TRUE)}
答案 0 :(得分:2)
就我可以从您的代码中读取而言,您尝试cbind一个可能无效的空对象。这也是错误告诉你的。可能在某些时候a
只是空的,因为没有匹配。所以只需添加一个条件
if(sum(id) !=0) { ... }
通过重写代码来考虑这一点,您可以从中受益匪浅。我试着猜猜你想做什么,这段代码完全一样:
xx <- apply(outcomes,1,function(p){
id <- apply(regulationtable,1,function(i)
sum(i != p ) == 0)
if(sum(id) !=0)
cbind(as.data.frame(id[id]),t(p))
})
write.table(do.call(rbind,xx),file="file")
它返回一个列表xx,对于每个可能的结果,具有相同规则模式的基因。用以下方法测试:
outcomes <- expand.grid(c(0,1),c(0,1),c(0,1),c(0,1))
regulationtable <- data.frame(
t1=sample(0:1,10,replace=T),
t2=sample(0:1,10,replace=T),
t3=sample(0:1,10,replace=T),
t4=sample(0:1,10,replace=T)
)
rownames(regulationtable) <- paste("Gene",1:10,sep="-")