【问题标题】:R:Dividing each element of a list with elements of another listR:将列表的每个元素与另一个列表的元素相除
【发布时间】:2018-04-10 15:27:18
【问题描述】:

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

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),元素vector2的所有10个数字都应该除以value2(4)等等。

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

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

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

【问题讨论】:

    标签: r list apply


    【解决方案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
    

    所以也许您的代码正在运行并且您得到了正确的结果?或者可能只是错误的函数定义?

    【讨论】:

      【解决方案2】:

      tidyverse 的方式,您可以使用purr::map2,以下将做您想做的事情

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

      同时迭代foo_listfoo_list2的元素

      【讨论】:

        猜你喜欢
        • 2023-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-19
        相关资源
        最近更新 更多