R:将列表的每个元素与另一个列表的元素分开

时间:2018-04-10 15:27:19

标签: r list apply

假设我有一个包含3个向量的列表和另一个包含三个元素的列表:

foo_list <- list(vector1=rnorm(10), vector2= rnorm(10), vector3=rnorm(10)
foo_list2 <- list(value1= 2, value2=4, value3=10)

现在我不想将vector1的所有10个数字除以value1(2),所有10个元素vector2的数字应除以value2(4),依此类推。

这只是一个简短的例子。我的真实列表包含20个向量和20个数字。 我的主要计算是计算百分比变化。

我尝试了mapply,但它给出了错误的结果:

percentage_change <- function(data, actual){((data/actual)-1)*100)
foo_results <- mapply(percentage_change, foo_list, foo_list2)

2 个答案:

答案 0 :(得分:1)

以下是mapply

的使用方法
result = mapply(FUN = `/`, foo_list, foo_list2, SIMPLIFY = FALSE)

但是,如果我修复代码中的语法,我会得到相同的结果:

# replaced final `)` with `}`, changed "value" to "actual" in the body
percentage_change <- function(data, actual) {
    ((data / actual) - 1) * 100
}

foo_results <- mapply(percentage_change, foo_list, foo_list2)
result_simple = (mapply(FUN = `/`, foo_list, foo_list2) - 1) * 100
all(foo_results == result_simple)
# [1] TRUE

那么也许您的代码正常运行并且您获得了正确的结果?或者也许只是糟糕的功能定义?

答案 1 :(得分:0)

tidyverse方式,您可以使用purr::map2,以下内容可以实现您想要的效果

library(tidyverse)

results <- purrr::map2(foo_list, foo_list2, ~ .x / .y)

同时迭代foo_listfoo_list2的元素