Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用;如果;要克服数据基本上都是常数误差的r?_R - Fatal编程技术网

如何使用;如果;要克服数据基本上都是常数误差的r?

如何使用;如果;要克服数据基本上都是常数误差的r?,r,R,我需要比较控制样本和疾病样本之间的细菌基因表达丰度。我有一个由R读取的大数据集,它包含58000行不同的基因,6列。前三列代表对照组的值,而其余三列则来自患病患者 数据是一个矩阵,所有值都是数字 我是R的新手,我正试图找出如何包含一个“如果”来防止错误“数据基本上是恒定的”,我假设这种情况正在发生,因为疾病组和对照组的许多基因表达值是相同的(两组中的一些基因表达值也是0) 我使用的代码如下 pvalues我发现解决这个问题的最好方法是单独编写函数,然后使用apply函数 首先,我们有reprex

我需要比较控制样本和疾病样本之间的细菌基因表达丰度。我有一个由R读取的大数据集,它包含58000行不同的基因,6列。前三列代表对照组的值,而其余三列则来自患病患者

数据是一个矩阵,所有值都是数字

我是R的新手,我正试图找出如何包含一个“如果”来防止错误“数据基本上是恒定的”,我假设这种情况正在发生,因为疾病组和对照组的许多基因表达值是相同的(两组中的一些基因表达值也是0)

我使用的代码如下


pvalues我发现解决这个问题的最好方法是单独编写函数,然后使用
apply
函数

首先,我们有reprex数据

dat <- structure(c(37L, 1L, 187L, 97L, 162L, 16L, 0L, 0L, 0L, 0L, 0L, 0L, 2L, 
                   0L, 3L, 6L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
                   0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), 
                 .Dim = c(6L, 6L), 
                 .Dimnames = list( c("gene1_36040_cov_12.4365_1", 
                                     "gene2_36040_cov_12.4365_3", 
                                     "gene3_32139_cov_10.3119_1", 
                                     "gene4_32139_cov_10.3119_2", 
                                     "gene5_32139_cov_10.3119_3", 
                                     "gene6_27992_cov_10.5976_1" ), 
                                   c("SRR527345", "SRR527312", "SRR527312", 
                                     "SRR52324", "SRR525625", "SRR53526")))

我们还将根据数据中的列名命名这个新向量

names(out) <- colnames(dat)

out
现在我们可以添加一个阈值,只返回那些满足某个阈值的基因名称。因为上面的值大多大于.4,为了便于说明,我将阈值设置为这个级别。如果要将阈值降至0.05,可以


p_thresh <- 0.4

names(out)[out <= p_thresh]

在重复相同值的“坏”数据上进行测试,如下所示:

bad <- matrix(rep(1, 36), ncol = 6)

out <- apply(bad, 1,you_function )

out

你似乎在对两个向量进行t检验,每行两个三元组。如果任意一个集合有3个相等的值,它将抛出一个错误

you_function <- function(currRow){

  res <- try(t.test(currRow[4:6], currRow[1:3])$p.value)

  if(grepl(pattern = "Error", x = res)){ 
    return(NA)
  } else {
    res
  }

}
没有您的数据,很难手工定制一个好的解决方案,但是您可以只选择这两组元素1:3和4:6至少有一个元素彼此不同的行

selection_vector <- !(
finalgenecount[1,] == finalgenecount[2,] | 
finalgenecount[1,] == finalgenecount[3,] | 
finalgenecount[2,] == finalgenecount[3,] | 
finalgenecount[4,] == finalgenecount[5,] | 
finalgenecount[4,] == finalgenecount[6,] | 
finalgenecount[5,] == finalgenecount[6,]
) 

selection\u vector感谢您的上述介绍。我现在有一个错误,说类中有错误(res):找不到函数“类”。很抱歉,现在再试一次。应该是一流的,而不是一流的谢谢你的帮助。我现在正试图识别那些在表达上存在显著差异的基因(p<0.05),然而,我可以使用代码来查看有多少基因。不太确定是否使用grep或if函数来获取p值小于0.05的基因(位于行中)的名称。当我尝试这样做时,它返回的基因名带有false作为p值,这是不对的。@Hugh169试试这个now@hugh169没问题。如果解决方案有效,请接受它作为解决方案,以便其他人知道它是有效的解决方案。您好,它是可以做到的,所以如果无法测试,您希望使用NA吗?一个稍微离题的建议是,你可以试试像DESeq或edgeR这样的东西?给你更多的力量

p_thresh <- 0.4

names(out)[out <= p_thresh]

[1] "SRR527345" "SRR52324" 
bad <- matrix(rep(1, 36), ncol = 6)

out <- apply(bad, 1,you_function )

out

[1] NA NA NA NA NA NA

selection_vector <- !(
finalgenecount[1,] == finalgenecount[2,] | 
finalgenecount[1,] == finalgenecount[3,] | 
finalgenecount[2,] == finalgenecount[3,] | 
finalgenecount[4,] == finalgenecount[5,] | 
finalgenecount[4,] == finalgenecount[6,] | 
finalgenecount[5,] == finalgenecount[6,]
) 
pvalues <- apply(finalgenecount[selection_vector ,], 1, function(currRow)
  {
  t.test(currRow[4:6], currRow[1:3])$p.value})