首页 > 解决方案 > 根据某些条件选择带有 apply() 的函数

问题描述

apply()函数中,我需要提供一个函数名。但就我而言,该函数名称需要基于其他条件。下面是这样的例子:

library(dplyr)
Function = TRUE
as.data.frame(matrix(1:12, 4)) %>%
    mutate(Res = apply(as.matrix(.), 1, ifelse(Function, ~mean, ~sd), na.rm = TRUE))

但是,我遇到了以下错误:

Error: Problem with `mutate()` column `Res`.
ℹ `Res = apply(as.matrix(.), 1, ifelse(Function, ~mean, ~sd), na.rm = TRUE)`.
✖ attempt to replicate an object of type 'language'
Run `rlang::last_error()` to see where the error occurred.

您能否帮助我以正确的方式应用条件来选择功能。

标签: rapply

解决方案


这应该有效:

library(dplyr)
Function = TRUE
as.data.frame(matrix(1:12, 4)) %>%
  mutate(Res = apply(as.matrix(.), 1, if (Function) mean else sd, na.rm = TRUE))

ifelse是一个函数,它接受一个向量并对其应用逻辑条件,如果该条件对那个元素为真,则返回一个包含某个指定值的向量,如果该条件对该元素为假,则返回另一个指定值。在 R 中编程时,单独的if else运算符用于条件。有时它们是可互换的,有时它们不是。


推荐阅读