You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言自定义函数中如何对向量指定的多列应用pmin等函数

R自定义函数计算指定多列的每行最小值

错误原因

你原代码的写法问题有两个:

  • [[运算符仅支持选取单个列,传入多个列名的字符向量时会报错,选取多列需要用单中括号[
  • pmin()要求参与计算的每一列作为独立的位置参数传入,不能直接传入多列的数据框对象

基础R实现方案

min.col <- function(data, conditions){
  # do.call会把第二个参数的列表元素,拆成第一个函数的独立入参
  data$Min <- do.call(pmin, data[conditions])
  # 返回修改后的数据框,R函数默认不会修改外部的原数据对象
  return(data)
}

调用示例

# 构造示例数据集
C1 <- c(1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0)
C2 <- c(0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0)
C3 <- c(0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1)
C4 <- c(0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)
Data <- data.frame(C1, C2, C3, C4)

# 调用函数,将返回的结果赋值给原对象完成更新
Data <- min.col(Data, conditions = c("C1", "C2", "C4"))

运行后查看Data$Min即可得到C1、C2、C4三列的每行最小值。

Tidyverse实现方案(适用dplyr用户)

如果你习惯使用tidyverse生态,可以用以下写法,可读性更高:

library(dplyr)

min.col_tidy <- function(data, conditions){
  data <- data %>%
    mutate(Min = pmin(across(all_of(conditions))))
  return(data)
}

其中all_of()用于安全匹配传入的列名字符串,避免和环境中的其他变量重名引发报错。


内容的提问来源于stack exchange,提问作者CNiessen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 06:24:06