我是函数写作的新手,所以希望下面的内容有所帮助。
我想创建一个带有一些参数的函数,这些参数将用于对data.frame进行子集化。我在论坛上搜索过,发现这些Q&有趣,但未能从讨论中回答我的问题:
我想要创建的函数将采用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")
显然,我做错了什么......有人可以帮忙吗?
答案 0 :(得分:3)
你会想要做的事情如下:
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
参数也未正确解析。这是不在非交互模式下使用subset
的原因之一,即在交互式R控制台之外的任何其他模式。