r - 基于多个函数参数的子集

标签 r function subset

我是函数编写的新手,所以希望下面的内容有意义。

我想创建一个带有一些参数的函数,这些参数将用于对 data.frame 进行子集化。我在论坛上进行了搜索,发现这些问答很有趣,但无法从讨论中回答我的问题:

我想要创建的函数将采用 df、列名称和与列名称的行中匹配的值。这是我的尝试,我认为这是错误的:

x <- data.frame("col1"=c("email","search","direct"),
            "col2"=c("direct","email","direct"),
            "col3"=c(10,15,27))

fun <- function(df,col,val) {
  result <- subset(df, col==val)
  return(result)
}

我想传入df,x。列名,假设为“col2”。一个值,比如说“电子邮件”。我尝试这样做会返回 0 长度的 df。

fun(x,"col2","email")

显然我做错了什么......有人可以帮忙吗?

最佳答案

你会想做这样的事情:

df[df[[col_name]] == value,]

该函数将变为:

fun <- function(df, col_name, value) {
  df[df[[col_name]] == value,]
}
fun(x, 'col2', 'email')
    col1  col2 col3
2 search email   15

如果您想考虑逻辑向量中的 NA 值:

fun <- function(df, col_name, value) {
  logical_vector = df[[col_name]] == value
  logical_vector[is.na(logical_vector)] = FALSE
  df[logical_vector, drop = FALSE]
}

为什么你的例子不起作用是因为subset没有查看col的值。相反,它会查找名为 col 的列。我怀疑 val 参数也没有正确解析。这是不在非交互模式(即除了交互式 R 控制台之外的任何其他模式)下使用 subset 的原因之一。

关于r - 基于多个函数参数的子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17022791/

相关文章:

r - 构建小插图时安装包失败((..)/doc/index.html 丢失)

r - R 中的线性判别分析 - 训练和验证样本

c++ - 将集合与集合集合进行比较的最佳算法

r - 如何正确地对 r 中的数据框进行子集化?

r - 过滤或子集化数据框不包含所有值

r - 我可以在 R 中写入和访问内存中的文件吗?

r - 文档在 RSelenium 中完成

java - 如何在不使用背景的情况下删除形状(255);

javascript - 我如何从另一个外部 javascript 文件中的外部 javascript 文件调用函数?

c++ - 是否可以检测绑定(bind)成员函数引用的对象是否被删除或销毁