我是函数编写的新手,所以希望下面的内容有意义。
我想创建一个带有一些参数的函数,这些参数将用于对 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/