strsplit与lapply结合使用疑问:泰坦尼克数据集称谓提取代码差异
问题解析:两段lapply代码的差异
核心原因:lapply的第二个参数必须是函数
lapply的语法是lapply(X, FUN, ...),其中第二个参数FUN要求是函数类型,不能是普通字符串或数值。
第一段报错代码的问题
lapply(data$Name, strsplit(data$Name, split = "[,.]")[[1]][2])
这段代码里,你先执行了strsplit(data$Name, split = "[,.]")[[1]][2]——这一步是对整个data$Name向量做拆分,然后取第一个名字拆分后的第二个元素,结果是类似" Mr"的字符串。
当把这个字符串传给lapply的第二个参数时,lapply会误以为你要调用一个叫" Mr"的函数,但R中根本不存在这个函数,所以抛出object ' Mr' of mode 'function' was not found的错误。
第二段正常代码的逻辑
lapply(data$Name, function(x)strsplit(x, split = "[,.]")[[1]][2])
这里传给lapply的第二个参数是匿名函数function(x):
- 每次迭代时,lapply会把
data$Name里的单个名字(比如"Braund, Mr. Owen Harris")传给参数x - 对这个单独的
x执行strsplit拆分,再取拆分后的第二个元素,得到对应的称谓 - 整个过程是对每个名字单独处理,完全符合lapply的迭代逻辑
内容的提问来源于stack exchange,提问作者Taek Hwang
相关产品推荐
相关产品推荐

