2015-05-01 2 views
1

У меня есть функция, где im пытается сравнить столбец dataframe с таблицей ref типа типа. Я загрузил некоторые данные из центрального статистического управления Норвегии с популярными именами. Я хочу добавить столбец в свой фрейм данных, который в основном равен 1 или 0, если имя отображается в списке (1 является мальчиком 0, являющимся девочкой). Im получает следующую ошибку с кодомR Функции с переменными

*Error in match(x, table, nomatch = 0L) : object 'x' not found* 

Данные кадра - это поезд. справочных данных male_names

male_names <- read.csv("~/R/Functions_Practice/NO/BoysNames_Data.csv", sep=";",as.is = TRUE)[ ,1] 

get.sex <- function(x, ref) 
    for (i in ref) 
    { 
    if(x %in% ref) 
    {return (1)} 
    } 

# set default for column 
    train$sex <- 2 
# Update column if it appears in the names list 
    train$sex <- sapply(train$sex, FUN=get.sex(x,male_names)) 

Я бы затем использовать функцию для запуска Имени файла второй Девушки против стола и установить флаг для каждой записи в ноль, где это происходит

Может кто-нибудь помочь

ответ

3

При использовании sapply вы не записываете аргументы непосредственно в параметр FUN.

train$sex <- sapply(train$sex, FUN=get.sex,ref = male_names) 

Подразумевается, что train$sex является x аргумент, а все остальные параметры передаются после этого (в данном случае, это просто ref) и явно определены.

Edit:

Как отмечалось Joran, в данном случае sapply не особенно полезно, и вы можете сделать результаты в одной строке:

train$sex = (train$sex %in% male_names)*1 

%in% может быть использован, когда аргумент на left - это вектор, поэтому вам не нужно его перебирать. Умножая результат на одно преобразование логических (булево) значений в целые числа. 1*TRUE - 1, и 1*FALSE - 0.

+1

Возможно, стоит отметить, что 'sapply' на самом деле не нужен здесь, кажется. Возможно, это просто его векторизация. – joran

+0

Хорошая идея. Я сделал надпись с включенным. Однако по-прежнему важно показать, что было не так с исходным кодом. –

+0

Это замечательно, работает намного быстрее и, что более важно, работает. Спасибо, парни. Это здорово, когда вы видите, что это действительно работает :) –

Смежные вопросы