在我的全球环境中,我的变量具有以下名称:
- filtered_A
- unfiltered_A
- filtered_B
- unfiltered_B
醇>
依旧......
变量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(),那是因为我有许多数据帧要匹配。
提前致谢。