Как работает вставка в функции - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть кадр данных, как показано ниже

Col1     Col2
White    Orange
White    Blue
Red      White

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

paste_fun <- function(i){
  (paste(as.character(i),collapse=" "))
}

и нижеприведенный код добавляет новый столбец во фрейм данных. Мой вопрос: здесь введен 1 который является строкой, как он считает его новым столбцом.

phone_data["new_col"] <- apply(phone_data(as.character[i]),1,paste_fun)

Ответы [ 2 ]

0 голосов
/ 06 февраля 2020

Эта функция ничего не знает о столбцах. Он развертывается с помощью функции apply, у которой есть второй аргумент, определяющий, работать ли со строками или столбцами. Эта функция получает одну строку кадра данных как вектор, и pastefun объединяет значения, используя collapse=" ". А функция [<- - это то, что помещает значения из вызова вставки в столбец кадра данных.

Функция paste обычно работает в векторизованном виде, возвращая вектор длины, определяемый длина его аргументов. Аргумент collapse, однако, изменяет его работу и «сворачивает» все значения и, таким образом, возвращает вектор символов длины 1 (по одному на каждую строку при развертывании с помощью apply( ..., 1, ...}

Так что это действительно apply -функция, которая получает кредит за действия по строкам над фреймом данных, и [<- функция, которая получает кредит за создание нового столбца.

0 голосов
/ 06 февраля 2020

Учитывая, что у вас есть только два столбца в вашем фрейме данных, вам даже не нужно использовать функцию apply, просто работает paste:

phone_data$new_col <- paste(phone_data$Col1, phone_data$Col2)

Относительно того, как apply работает, вы передаете 1 в качестве второго аргумента, который говорит R сделать применение в режиме строки. Таким образом, он запускает вашу функцию вставки для всей строки, приведенной к символьному вектору, для генерации сцепленного результата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...