带变量的R函数

带变量的R函数,r,function,variables,R,Function,Variables,我有一个函数,我试图将数据帧列与字符类型的ref表进行比较。我从挪威中央统计局下载了一些名字很流行的数据。我想在我的数据框中添加一列,如果名称出现在列表中,则该列基本上是1或0(1是男孩,0是女孩)。我得到了下面的代码错误 *Error in match(x, table, nomatch = 0L) : object 'x' not found* 数据帧是列车的一部分。 参考数据为男性姓名 male_names <- read.csv("~/R/Functions_Practice/N

我有一个函数,我试图将数据帧列与字符类型的ref表进行比较。我从挪威中央统计局下载了一些名字很流行的数据。我想在我的数据框中添加一列,如果名称出现在列表中,则该列基本上是1或0(1是男孩,0是女孩)。我得到了下面的代码错误

*Error in match(x, table, nomatch = 0L) : object 'x' not found*
数据帧是列车的一部分。 参考数据为男性姓名

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))

male\u name使用
sapply
时,不能直接在
FUN
参数中写入参数

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

当左边的参数是向量时,可以使用%
中的
%in,这样就不必对其进行循环。将结果乘以1将逻辑(布尔)值转换为整数
1*TRUE
产生
1
,而
1*FALSE
产生
0

可能值得指出的是,这里似乎并不需要
sapply
。也许可以把它矢量化。好主意。我在上面做了一个编辑。不过,展示原始代码的错误仍然很重要。这很好,工作速度更快,更重要的是工作正常。谢谢各位。当您看到它实际工作时,它非常棒:)
train$sex = (train$sex %in% male_names)*1