我是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”
答案 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
内部循环的第一次迭代中,x
是x = c("Philip" "70")
,而x[1]
是"Philip"
,依此类推。
这就是为什么您获得名称列表的原因。请注意,lapply
只是隐藏了for
循环。
您的lapply
基本上是这样做的:
for (i in 1:4){
split_score[[i]][1]
}