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

如何在R中编写函数提取并复制数据框(df)指定列的数值

R语言数据框列处理方案

提取整列数值的基础方法

如果你仅需要获取该列所有数值组成的向量,直接使用数据框列索引即可,假设该列列名为num,代码为:

col_values <- df$num

向量化素数判断实现

你参考的is.prime函数仅支持单个数值输入,原因是函数中使用的||是仅支持标量的短路逻辑运算符,且all()会对输入的整个向量做全局判断,无法逐元素计算。你可以通过两种方式实现整列批量处理:

方案1:快速包装单值函数

用Vectorize()直接对原单值函数做向量化适配,代码改动最小:

# 原单值素数判断函数
is.prime_single <- function(n) n == 2L || all(n %% 2L:ceiling(sqrt(n)) != 0)
# 转为支持向量输入的函数
is.prime <- Vectorize(is.prime_single)

# 对整列做素数判断,结果存入新列is_prime
df$is_prime <- is.prime(df$num)

方案2:原生向量化实现(效率更高)

针对长列场景,直接改写为向量化逻辑运行速度更快:

is.prime_vec <- function(n_vec) {
  res <- logical(length(n_vec))
  # 小于2的数不是素数
  res[n_vec < 2] <- FALSE
  # 2是素数
  res[n_vec == 2L] <- TRUE
  # 大于2的偶数不是素数
  even_flag <- n_vec > 2L & n_vec %% 2L == 0
  res[even_flag] <- FALSE
  # 处理剩余的奇数
  remain_n <- n_vec[!even_flag & n_vec > 2L]
  if (length(remain_n) > 0) {
    max_div <- ceiling(sqrt(max(remain_n)))
    divisors <- seq(3L, max_div, by = 2L)
    res[!even_flag & n_vec > 2L] <- sapply(remain_n, function(x) all(x %% divisors != 0))
  }
  return(res)
}

# 调用
df$is_prime <- is.prime_vec(df$num)

测试结果

针对你给出的列数值,运行后得到的素数判断结果为:TRUE、TRUE、FALSE、TRUE、FALSE、FALSE、TRUE、FALSE、TRUE、FALSE、TRUE、FALSE、TRUE

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 14:39:01