我开始使用矢量split_low
# Definition of split_low
pioneers <- c("GAUSS:1777", "BAYES:1702", "PASCAL:1623", "PEARSON:1857")
split <- strsplit(pioneers, split = ":")
split_low <- lapply(split, tolower)
然后我使用lapply从split_low向量中选择特定元素:
select_el <- function(x, index) {
x[index]
}
names <- lapply(split_low, select_el, 1)
years <- lapply(split_low, select_el, 2)
我的问题是这样的:为什么输入names
只返回一个名单列表(即"GAUSS", "BAYES"
等),而不是名称和年份(即"GAUSS 1777", "BAYES 1702"
等) )?
毕竟,当我输入
时split_low[1]
或者
select_el(split_low, 1]
R返回GAUSS 1777
而非GAUSS
拉普利怎么知道将名字与年份分开?
答案 0 :(得分:2)
要查看正在发生的事情,请直接查看split_low
:
> split_low
[[1]]
[1] "gauss" "1777"
[[2]]
[1] "bayes" "1702"
[[3]]
[1] "pascal" "1623"
[[4]]
[1] "pearson" "1857"
请注意,结果是包含4个元素的列表,每个元素都是2个元素的 vector 。
当我们输入split_low[1]
时,此请求split_low
的第一个元素 - 这是两个元素gauss
和1777
的向量。 (从技术上讲,它是长度为1的列表,包含此向量。要获得向量,请使用split_low[[1]]
。)相反,当您调用select_el
函数时,你将一个函数应用于列表的每个元素,并且该函数返回相应向量的第n个元素 - 在这种情况下,第一个索引返回名称,第二个返回years。然后,lapply
从这些输出中创建一个列表 - 因此只是名称的结果,或者只是几年。