hello 各位老baby们,我又来了。
昨天死乞白咧的搞了个包,处理了一个参数啥的。今天让我们继续debug。
我昨天晚上查询了一下这个的帮助文档,在github上找到了这个答案:
package.version("CellChat")
[1] "1.6.1"
Error in obj2 - obj1 : non-conformable arrays
Error in i_set_edge_attr(x, attr(value, "name"), index = value, value = attr(value, :
Length of new attribute value must be 1 or x, the number of target edges, not x
#So, I decide to fix source code, which solve my problom.
#Below R/visualization.R line 1644, add:
shared_label = intersect(rownames(obj1_raw), rownames(obj2_raw))
obj1 = obj1_raw[shared_label, shared_label]
obj2 = obj2_raw[shared_label, shared_label]
这个是写包的本人给的回复,至于他的那个fix后的完整代码由于太长了,大家还是可以自己查看一下吧。https://github.com/JiahaoWongg/CellChat_fix/blob/main/visualization.R
这里面可以看到具体的代码,很长,实话实说,我尝试了,没成功,虽然没报错,但是没有图生成出来,我也不知道为啥。
然后看了之后我决定自己摸索摸索,我刚开始进行了无限的操作:
# 首先从 cellchat 对象中提取 Normal 和 Tumor 组的原始网络数据
obj1_raw <- cellchat@net[["Normal"]][["count"]]
obj2_raw <- cellchat@net[["Tumor"]][["count"]]
# 使用 intersect 函数来找到两个条件共有的细胞类型
shared_label = intersect(rownames(obj1_raw), rownames(obj2_raw))
# 根据共有的细胞类型提取相应的网络数据,确保维度一致
obj1 = obj1_raw[shared_label, shared_label, drop = FALSE]
obj2 = obj2_raw[shared_label, shared_label, drop = FALSE]
# 接下来,你可以进行两个网络数据的比较,例如计算差异等
net.diff <- obj2 - obj1
但是他还是失败了,得到的结果还是不对的。
有句话说得好,问题还是要从自己身上找,我再次的自信的查看了我的数据,发现了问题所在:
我的Tumor组我的Normal组
发现了么!!!,正常组里没有OPC这个亚群,所以我最后构建的cellchat对象的时候,就不成功,因为那个函数的内容是两者构建完了之后做减法,才可以得到的,我这个相当于9-10,没有办法一一对应的减法,所以那个错误才会生成,说他不舒服了,他确实不舒服。相当于钥匙掏的不对,肯定打不开锁。除非锁坏了。 找到了问题的根源就知道了,我在第一步读取数据亚群的时候就要把他删掉,这样两者就都是一样的了,这期间我们还要看一个这样的图:
通过这个图判断,其实我们这个数据的内容,OPc很少很少,所以删了也没啥毛病。所以话不多说了,重新跑起来吧。
好了,我要继续跟我们的细胞唠嗑了,等我跟他唠明白了,在跟你们说吧。
散会!!!