Это мой первый пост, поэтому заранее извиняюсь, если не совсем ясно. У меня есть сложная задача (!! не курсовая работа !!) с большим набором данных идентификаторов генов (столбец 1) и уровней экспрессии (столбцы 40-47). Я пишу функцию, которая возвращает результат, если стандартное отклонение больше среднего. До сих пор я был в состоянии распечатать результаты, но я хочу напечатать имена генов, если для этой строки нет выводов FALSE.
Я также получаю предупреждение и не могу понять, почему.
Пожалуйста, помогите! (z) - это фрейм данных, который я буду вызывать после.
> getHighlyVariableGenes <- function(z) {
for (i in z[40:47]) {
if (output <- sapply(z[,40:74], sd) > rowMeans(z[,40:74])){
return(output)
} else {
return("")
}
}
}
> getHighlyVariableGenes(RNA_data)
Что дает мне:
[947] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[958] TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE
[969] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[980] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[991] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[ reached getOption("max.print") -- omitted 62652 entries ]
Warning messages:
1: In sapply(z[, 40:74], sd) > rowMeans(z[, 40:74]) :
longer object length is not a multiple of shorter object length
2: In if (output <- sapply(z[, 40:74], sd) > rowMeans(z[, 40:74])) { :
the condition has length > 1 and only the first element will be used
Я также пробовал:
>getHighlyVariableGenes <- function(z) {
for (i in z[40:47]) {
if (output <- sapply(z[,40:74], sd) > rowMeans(z[,40:74])){
return(z['gene_id'])
} else {
return("")
}
}
}
Который, по-видимому, печатает каждое значение в первом столбце и не выдает ложных выходных данных:
>995 ENSG00000066735
>996 ENSG00000066739
>997 ENSG00000066777
>998 ENSG00000066813
>999 ENSG00000066827
>1000 ENSG00000066855
[ reached getOption("max.print") -- omitted 62652 rows ]
Любое предложение приветствуется!