В своё время сделал пакет, который основан на R6 классах RDML. Штука прикольная и для «серьёзных» программистов больше всего напоминает стандартные классы из ООП. Однако второй раз я бы так не делал :) Основная причина – скорость создания объектов. Сейчас бы я, наверное, сделал просто S3.
Из важного к статье можно добавить про то, что может быть непривычно для R: копирование объекта не создаёт новый объект, а только ссылку на старый.
tomJunior <- tom
tomJunior$rename("Tom Jr.")
tom
<Cat>:
Name: Tom Jr.
Age: 1
Breed: Scottish fold
Никогда не пользовался 1С и зашёл сюда из спортивного интереса. В левом столбце – это то, что применяется в коде? Правильно я понимаю, что при вводе подобного ВариантЗаписиДатыJSON нужно ещё раскладку переключать?
Спасибо за информацию. Я помню, что одно время она работала нормально, потом что-то поменялось и я перестал её использовать. Может теперь опять работает, так как я ожидаю :)
Мне кажется Вы опять усложнили решение не используя встроенные функции.
В Вашем варианте получается, что одно и тоже разделение на слова происходит три раза?
Я бы сделал функцией, которую предлагал выше dt[, (paste0('w_', 1:3)) := NULL]
microbenchmark({
dt[, (paste0('w_', 1:3)) := tstrsplit(w, split = ' ', fixed = T, keep = 1L:3L)]
})
у меня это работает в 5 раз быстрее.
Кстати функция str_split из stringr позволяет получать на выходе матрицу и можно её использовать
По моему с новым примером что-то не то. Функция first_l_f3 не используется в коде, а только создаётся.
И выдаётся такая ошибка dt[
, (paste0('w_', 1:3)) := strsplit(w, split = ' ', fixed = T)
]
Error in `[.data.table`(dt, , `:=`((paste0("w_", 1:3)), strsplit(w, split = " ", :
Supplied 3 columns to be assigned 100000 items. Please see NEWS for v1.12.2.
Для вытаскивания первой буквы можно ещё применить встроенную в data.table функцию разделения строк tstrsplit. По скорости будет примерно равно третьему варианту, но код гораздо проще :) Естественно это решение для конкретной задачи, а не для понимания, как делать быстро в целом.
Конечно с ifelse получить можно, но вот если колонок модифицируется несколько, то и ifelse начнут плодиться :)
Как-то так: dat %>%
mutate(b = ifelse(a > 1, b * 2, b),
c = ifelse(a > 1, c * 2, c),
d = ifelse(a > 1, d * 2, d))
по мне наоборот, элегантности в таком мало + фильтрация происходит каждый раз заново.
Тогда уж лучше: dat[dat$a > 1, ] <- dat %>%
filter(a > 1) %>%
mutate(b = b * 2)
dat
# A tibble: 4 x 2
a b
1 1 1
2 2 4
3 3 6
4 4 8
здесь будет в любом случае не больше двух фильтраций
Пользуюсь tidyverse (точнее dplyr, так как всё из tidyverse не нужно) и data.table.
В data.table больше нравится то, что фильтрация с изменением данных позволяет не отбрасывать все остальные данные.
Вот, что я имею ввиду: dat <- tibble(a = 1:4, b = 1:4)
dat <- dat %>%
filter(a > 1) %>%
mutate(b = b * 2)
dat
# A tibble: 3 x 2
a b
1 2 4
2 3 6
3 4 8
dat <- data.table(a = 1:4, b = 1:4)
dat[a > 1, b := b * 2]
dat
# a b
1: 1 1
2: 2 4
3: 3 6
4: 4 8
Там есть экспорт в виде картинок, но конечно проще в данном случае научиться работать с ggplot. Это больше, как альтернативное решение для тех, кто любит нажимать кнопки :)
ПЦР наборы, о которых вы говорите, по определению не являются тем, что подразумевается под обсуждаемым здесь «генетическим тестом».
честно говоря не понял, что под генетическим тестом Вы в данном случае понимаете только NGS и чипы.
На настоящий момент генотипирование на чипах и с NGS в России является скрининговым методом (отсюда и отсутствие законодательного регулирования), а не методом диагностики.
Скрининговым NGS является пока кто-то первый РУ не получит. Думаю и Атлас пытается это сделать, хотя вряд ли для всего генома. Вопрос только когда :)
Для выявления моногенных заболеваний можно секвенировать экзом, что будет стоить примерно так же, как и полный геном.
дешевле в несколько раз: т.е. десятки тысяч рублей.
Разница в ширине покрытия будет компенсироваться глубиной покрытия.
и тем самым большей достоверностью для действительно полезной информации
В любом случае, для скринига моногенных заболеваний лучше секвенировать, а не делать ПЦР, используемый для валидации.
В России в целом нет никаких «регистрационных удостоверений минздрава на гентесты».
не вводите людей в заблуждение. Любые наборы/приборы используемые в медицине должны иметь регистрационные удостоверения. Вот пример таких наборов для генетического тестирования www.dna-technology.ru/production/genetika-cheloveka
Компетентный врач сам может сделать вывод о том, насколько предоставляемые результаты тестирования могут помочь в терапии/скрининге.
проблема, что результат должен быть получен «методом с РУ».
Моногенных заболеваний существует достаточно много — несколько сотен. На ВГС странице сайта Атласа указано, что проводится поиск по почти 400 моногенным заболеваниям, и, очевидно, это не все.
для выявления моногенных заболеваний не обязательно секвенировать весь геном.
Ещё раз повторю, что я не против секвенирования полного генома. Готов и себе сделать :)
это нужно смотреть аналитические характеристики конкретного теста. В общем случае, если нашлось что-то критичное и материал остался, можно попробовать перепроверить секвенированием по Сэнгеру – этот метод «золотой стандарт».
Я так понимаю, что нет. Полногеномное — это условно, множим Вашу ДНК, режем на кусочки, далее считываем, а потом клеим поверх референсного генома человека. С какой-то вероятностью осознаем, что в позиции Х находится нуклеотид У.
Микрочипирование по идее точнее — т.к. оно проверяет, если, правильно понимаю, конкретное основание в конкретной позиции. Сигнал либо есть, либо его нет.
чип в этом плане не точнее. В чипе есть синтетическая ДНК, к которой «прилипает» Ваша похожая ДНК, но если такая похожая есть в нескольких участках генома, то может быть ошибка. Просто чипы делают на заранее выбранные точки и они уже проверены на такие ошибки, а при NGS нахождение какой-то новой неизученной и вероятно значимой мутации – это повод для перепроверки другими методами.
я так понял, что эти микрочипы изначально были заточены на медицину, но потом внезапно оказалось, что они родство между людьми определяют очень хорошо.
не совсем так, FDA запретил им заниматься выдачей диагнозов или результатов напоминающих диагнозы. Сейчас они могут выдавать результаты по ограниченному списку заболеваний customercare.23andme.com/hc/en-us/articles/211831908-23andMe-and-the-FDA
Кстати у Атласа, как я понимаю, регистрационных удостоверений минздрава на тесты нет и на них врачи ориентироваться не могут. Собственно и назначать не могут, так как в схемах лечения этого нет. Просто пока на это смотрят сквозь пальцы.
Поэтому мое мнение, что попытка узнать свое здоровье по ним… Это как гадание на кофейной гуще.
NGS в этом плане не сильно лучше. На самом деле заболеваний, при которых определённая мутация приводит к достоверному проявлению не так много. Большая часть изменений или дают какой-то небольшой вклад, или настолько критичны, что являются летальными и такие люди просто не рождаются. Кроме того нужно знать, как информация об этих изменениях повлияет на терапию: и тут тоже, в большинстве случаев – никак.
Поэтому если есть желание и деньги: делайте полногеномное секвенирование – хуже не будет, но чуда ждать не стоит. Только если Вы не слишком мнительный человек и потом не начнёте у себя диагностировать то, чего нет :) А так, то что здоровый образ жизни и ежедневная зарядка улучшает самочувствие понятно и без NGS :) Особенно это забавно в части спортивных достижений: генетика там работает в лучшем случае для спортсменов уровня олимпийской сборной.
что значит сырые данные генотипирования? чипы выдают аллельные варианты в конкретных точках. Полногеномное секвенирование принципиально выдаёт тоже самое только для большего количества точек (при этом Вы решили, что для достоверного определения хватает 30х покрытия – ваше право, но к сравнению точности методов это не применимо: Вы сами правильно отметили, что это разные методики).
Поэтому если кто-то выбирает между методами, то единственный критерий: нужно ему столько данных или нет. Полногеномное секвенирование – это возможный задел на будущее, но в наших реалиях и данных чипов с излишком.
А по поводу интерпретации данных – те же 23andme уже обжигались на этом. Слишком это «щепетильная» информация давать выводы о возможных предрасположенностях к заболеваниям неподготовленным пользователям.
Из важного к статье можно добавить про то, что может быть непривычно для R: копирование объекта не создаёт новый объект, а только ссылку на старый.
Про это подробней тут
В Вашем варианте получается, что одно и тоже разделение на слова происходит три раза?
Я бы сделал функцией, которую предлагал выше
dt[, (paste0('w_', 1:3)) := NULL]
microbenchmark({
dt[, (paste0('w_', 1:3)) := tstrsplit(w, split = ' ', fixed = T, keep = 1L:3L)]
})
у меня это работает в 5 раз быстрее.
Кстати функция str_split из stringr позволяет получать на выходе матрицу и можно её использовать
library(stringr)
dt[, (paste0('w_', 1:3)) := NULL]
microbenchmark({
cbind(dt, str_split(dt$w, " ", simplify = TRUE)[, 1:3])
})
И выдаётся такая ошибка
dt[
, (paste0('w_', 1:3)) := strsplit(w, split = ' ', fixed = T)
]
Error in `[.data.table`(dt, , `:=`((paste0("w_", 1:3)), strsplit(w, split = " ", :
Supplied 3 columns to be assigned 100000 items. Please see NEWS for v1.12.2.
dt[, first_l := NULL]
microbenchmark({
dt[, first_l := tstrsplit(w, split = ' ', fixed = T, keep = 1L)]
})
Как-то так:
dat %>%
mutate(b = ifelse(a > 1, b * 2, b),
c = ifelse(a > 1, c * 2, c),
d = ifelse(a > 1, d * 2, d))
по мне наоборот, элегантности в таком мало + фильтрация происходит каждый раз заново.
Тогда уж лучше:
dat[dat$a > 1, ] <- dat %>%
filter(a > 1) %>%
mutate(b = b * 2)
dat
# A tibble: 4 x 2
a b
1 1 1
2 2 4
3 3 6
4 4 8
здесь будет в любом случае не больше двух фильтраций
В data.table больше нравится то, что фильтрация с изменением данных позволяет не отбрасывать все остальные данные.
Вот, что я имею ввиду:
dat <- tibble(a = 1:4, b = 1:4)
dat <- dat %>%
filter(a > 1) %>%
mutate(b = b * 2)
dat
# A tibble: 3 x 2
a b
1 2 4
2 3 6
3 4 8
dat <- data.table(a = 1:4, b = 1:4)
dat[a > 1, b := b * 2]
dat
# a b
1: 1 1
2: 2 4
3: 3 6
4: 4 8
p <- ggplot(data=df_logging, aes(x=year, y=value)) +
geom_line(aes(linetype=location))
api_create(ggplotly(p), filename = "test")
Вам же в статье написали:
что ещё можно требовать от наушников для аудиофилов :)
честно говоря не понял, что под генетическим тестом Вы в данном случае понимаете только NGS и чипы.
Скрининговым NGS является пока кто-то первый РУ не получит. Думаю и Атлас пытается это сделать, хотя вряд ли для всего генома. Вопрос только когда :)
дешевле в несколько раз: т.е. десятки тысяч рублей.
и тем самым большей достоверностью для действительно полезной информации
это естественно
не вводите людей в заблуждение. Любые наборы/приборы используемые в медицине должны иметь регистрационные удостоверения. Вот пример таких наборов для генетического тестирования www.dna-technology.ru/production/genetika-cheloveka
проблема, что результат должен быть получен «методом с РУ».
для выявления моногенных заболеваний не обязательно секвенировать весь геном.
Ещё раз повторю, что я не против секвенирования полного генома. Готов и себе сделать :)
это нужно смотреть аналитические характеристики конкретного теста. В общем случае, если нашлось что-то критичное и материал остался, можно попробовать перепроверить секвенированием по Сэнгеру – этот метод «золотой стандарт».
чип в этом плане не точнее. В чипе есть синтетическая ДНК, к которой «прилипает» Ваша похожая ДНК, но если такая похожая есть в нескольких участках генома, то может быть ошибка. Просто чипы делают на заранее выбранные точки и они уже проверены на такие ошибки, а при NGS нахождение какой-то новой неизученной и вероятно значимой мутации – это повод для перепроверки другими методами.
не совсем так, FDA запретил им заниматься выдачей диагнозов или результатов напоминающих диагнозы. Сейчас они могут выдавать результаты по ограниченному списку заболеваний customercare.23andme.com/hc/en-us/articles/211831908-23andMe-and-the-FDA
Кстати у Атласа, как я понимаю, регистрационных удостоверений минздрава на тесты нет и на них врачи ориентироваться не могут. Собственно и назначать не могут, так как в схемах лечения этого нет. Просто пока на это смотрят сквозь пальцы.
NGS в этом плане не сильно лучше. На самом деле заболеваний, при которых определённая мутация приводит к достоверному проявлению не так много. Большая часть изменений или дают какой-то небольшой вклад, или настолько критичны, что являются летальными и такие люди просто не рождаются. Кроме того нужно знать, как информация об этих изменениях повлияет на терапию: и тут тоже, в большинстве случаев – никак.
Поэтому если есть желание и деньги: делайте полногеномное секвенирование – хуже не будет, но чуда ждать не стоит. Только если Вы не слишком мнительный человек и потом не начнёте у себя диагностировать то, чего нет :) А так, то что здоровый образ жизни и ежедневная зарядка улучшает самочувствие понятно и без NGS :) Особенно это забавно в части спортивных достижений: генетика там работает в лучшем случае для спортсменов уровня олимпийской сборной.
Поэтому если кто-то выбирает между методами, то единственный критерий: нужно ему столько данных или нет. Полногеномное секвенирование – это возможный задел на будущее, но в наших реалиях и данных чипов с излишком.
А по поводу интерпретации данных – те же 23andme уже обжигались на этом. Слишком это «щепетильная» информация давать выводы о возможных предрасположенностях к заболеваниям неподготовленным пользователям.