为什么我必须重新运行apply函数的代码才能工作?

时间:2017-09-27 14:21:52

标签: r apply

在我的全球环境中,我的变量具有以下名称:

  
      
  1. filtered_A
  2.   
  3. unfiltered_A
  4.   
  5. filtered_B
  6.   
  7. unfiltered_B
  8.   

依旧......

变量filtered_A是unfiltered_A的子集,它是包含基因名称的一列的数据框。我试图在unfiltered_A中添加一个带有两个字符串的新列:“Passed”或“notPassed”。 “通过”是存在于filtered_A中的那些基因。所以基本上我正在构建两个数据帧之间的匹配,如果它们不匹配则写“Passed”或“notPassed”。

我写了以下代码:

```{r unfiltered}
setwd("/home/alaa/Documents/Analysis/genes/WES/unfiltered")

# list that contains sample names 
vcfFiles <- list.files(getwd(), recursive = T)

for (i in vcfFiles) {
    print(i)
    assign(paste0("unfiltered_", i), read.table(i))
}
```


```{r filtered}
setwd("/home/alaa/Documents/Analysis/genes/WES/filtered")

for (i in vcfFiles) {
    print(i)
    assign(paste0("filtered_", i), read.table(i))
}
```

```{r matching}

for (i in vcfFiles){

  y <- grep(i, ls())


  filterd <- get(ls()[y[1]])
  unfilterd <- get(ls()[y[2]])

  name_filterd <- ls()[y[1]]
  name_unfilterd <- ls()[y[2]]

  assign(name_unfilterd, cbind(unfilterd, apply(unfilterd, 1, function(x) ifelse(any(x[1] == filterd), 'Passed','notPassed'))))

}

for (i in ls()){
  if (is.data.frame(get(i)) && ncol(get(i)) == 2 && grepl(pattern = "unfiltered_", x = i)) {
    print(i)
    j <- get(i)
    colnames(j)[2] <- "Situation"
    assign(i, j)
  }
}
#rm(i, j, filterd, unfilterd, name_filterd, name_unfilterd, y)
```

如果我运行此代码,它将在第一次失败时说:

    Error in apply(unfilterd, 1, function(x) ifelse(any(x[1] == filterd),  : 
  dim(X) must have a positive length

我确实理解这是因为毫无结果是无量纲的。但是,如果我重新运行此代码,它的工作没有任何问题。

有人可以解释我有什么问题,为什么第一次尝试失败了?

如果您想知道我为什么使用全局环境和ls(),那是因为我有许多数据帧要匹配。

提前致谢。

0 个答案:

没有答案