R: Ничто не было заменено с помощью функции gsub () - PullRequest
0 голосов
/ 18 февраля 2019

Привет! Я попытался заменить значение столбцов во фрейме данных, используя следующий код.

sampleNumber <- c(1:length(sampleId))
for (value in sampleNumber){
  genotypeCol <- paste("annotateData$", sampleId[value], sep = "") #sampleId is a vector contains column names in annotateData
  genotypeCol <- gsub("0\\/0", "ref", genotypeCol)
  genotypeCol <- gsub("0\\/1|0\\/2|0\\/3|1\\/2|1\\/3|2\\/3", "het", genotypeCol)
  genotypeCol <- gsub("1\\/1|2\\/2|3\\/3", "hom", genotypeCol)
}

В любом случае, содержимое остается прежним, но оно работает нормально, если вместо этого я использую следующий код.

annotateData$Genotype_SM01 <- gsub("0\\/0", "ref", annotateData$Genotype_SM01)
annotateData$Genotype_SM01 <- gsub("0\\/0", "ref", annotateData$Genotype_SM01)
annotateData$Genotype_SM01 <- gsub("0\\/0", "ref", annotateData$Genotype_SM01)

Так что любые идеи по этому вопросу.

1 Ответ

0 голосов
/ 18 февраля 2019

Вы вводите gsub() строку символов, содержащую имя вашей переменной.Чтобы получить действительную переменную, используйте get(paste("annotateData$", sampleId[value], sep = ""))
Редактировать

aux=get("annotateData")
var=aux[,sampleID[value]]

В этом случае var содержит значение annotateData$Genotype_SM01

edit 2
, переработав вашу проблему, следующий код должен делать то, что вы хотите.

annotateData=data.frame("Genotype_SM01"=c("a","a","b"),
                    "Genotype_SM02"=c("a","a","a"),
                    "Genotype_SM02"=c("b","b","a"),
                    stringsAsFactors = FALSE)
sampleId=names(annotateData)

sampleNumber <- c(1:length(sampleId))

for (value in sampleNumber){
  aux=annotateData[,sampleID[value]]
  aux <- gsub("0\\/0", "ref", aux)
  aux <- gsub("0\\/1|0\\/2|0\\/3|1\\/2|1\\/3|2\\/3", "het", aux)
  aux <- gsub("1\\/1|2\\/2|3\\/3", "hom", aux)
  annotateData[,sampleID[value]]=aux
}
...