我的select_first函数没有选择第一个元素

时间:2019-01-02 13:45:20

标签: r lapply

我是R的初学者。 我尝试制作一个选择向量的第一个元素的函数。 然后我在向量上使用了lapply函数。 但是,不是选择第一组学生和分数,而是弹出所有学生。 我了解我的功能是选择向量的每个组(?)中的第一个元素。但是,谁能解释为什么,我的功能在学生中而不是在第一个学生中得分?

请帮助。谢谢!

student_score <- c("Philip:70", "Jimmy:80", "Alex:90", "Steve:100")

split_score <- strsplit(student_score, split = ":")

select_first <- function(x) {
    x[1]
}

unlist(lapply(split_score, select_first)) 
#Used unlist() just to make the view of the result simpler

预期结果:“ Philip”“ 70” ///实际结果:“ Philip”“ Jimmy”“ Alex”“ Steve”

1 个答案:

答案 0 :(得分:1)

lapply函数只是在for的每个元素周围隐藏split_score循环。 strsplit之后的内容如下:

strsplit(student_score, split = ":") # gives a list
[[1]]
[1] "Philip" "70"    

[[2]]
[1] "Jimmy" "80"   

[[3]]
[1] "Alex" "90"  

[[4]]
[1] "Steve" "100"  

因此,您对lapply的呼叫可以这样转换:

  • 对于split_score中的每个元素(每个元素都是对名称-得分)
  • 提取第一个(x[1]

因此,在lapply内部循环的第一次迭代中,xx = c("Philip" "70"),而x[1]"Philip",依此类推。

这就是为什么您获得名称列表的原因。请注意,lapply只是隐藏了for循环。

您的lapply基本上是这样做的:

for (i in 1:4){
     split_score[[i]][1] 
    }