Итерирующая функция по каждой строке во фрейме данных в R - PullRequest
0 голосов
/ 01 ноября 2018

Итак, у меня есть функция flip.allele(a, b, c, d), которая принимает 4 аргумента, а затем возвращает числовое значение, основанное на сравнении этих разных аргументов. Сейчас я пытаюсь написать дополнительную функцию, которая возьмет эту функцию, а затем применяет ее ко всему фрейму данных, поэтому повторяйте исходную функцию для каждой строки в фрейме данных.

Итак, четыре значения, которые я хочу сравнить, находятся в столбцах 2, 3, 4, 5. И я хочу, чтобы он вывел значение сравнения этих четырех столбцов в новый столбец 6.

Это моя текущая попытка сделать это:

flip.data.frame = function(df) {

  for (i in nrow(df)) {

    df$flip = flip.allele(df[2], df[3], df[4], df[5])
  }
}

Проблема в том, что все мои попытки (включая эту) до сих пор означали, что при попытке использовать их в моих данных, он принимает первые 4 значения, правильно применяет функцию flip.allele и затем возвращает значение для эта строка в каждую строку во фрейме данных.

Я знаю, что это из-за способа, которым я использую бит df$flip =, но я также не уверен, каким будет решение. Я видел другой поток , который, казалось, предлагал использовать apply(), но я не совсем уверен, как его использовать.

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 01 ноября 2018

Мы можем использовать apply с MARGIN=1.

apply(df[2:5], 1, function(x) flip.allele(x[1], x[2], x[3], x[4]))

Или используя pmap

library(tidyverse)
pmap(setnames(df[2:5], letters[1:4]), flip.allele)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...