假设我有一个包含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)
答案 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_list
和foo_list2
的元素