lapply与分裂矢量

时间:2018-06-15 05:09:10

标签: r lapply

我开始使用矢量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

拉普利怎么知道将名字与年份分开?

1 个答案:

答案 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的第一个元素 - 这是两个元素gauss1777的向量。 (从技术上讲,它是长度为1的列表,包含此向量。要获得向量,请使用split_low[[1]]。)相反,当您调用select_el函数时,你将一个函数应用于列表的每个元素,并且该函数返回相应向量的第n个元素 - 在这种情况下,第一个索引返回名称,第二个返回years。然后,lapply从这些输出中创建一个列表 - 因此只是名称的结果,或者只是几年。

相关问题