[英]R: how can mapply take data.frame as a whole
说我有一个data.frame,我想通过不同的过滤器对数据进行子集化并获取它们的列表,因此我尝试了以下操作:
df <- data.frame(A=c(1,2,3), B=c(7,8,9))
filter_lst <- list(c(1,2), c(2,3))
filter_by_range <- function(df, filter) {
with(df, {df[A >= filter[1] &
A < filter[2], ]})
}
mapply(filter_by_range, df, filter_lst)
但是显示错误:
Error in eval(substitute(expr), data, enclos = parent.frame()) :
numeric 'envir' arg not of length one
Called from: with.default(df, {
df[A >= filter[1] & A < filter[2], ]
})
我想这是因为df
被作为一个列表mapply
,怎么能mapply
采取df
作为一个整体或任何其他更好的方法来完成这项工作?
如以上评论所述:
mapply(filter_by_range, filter=filter_lst, MoreArgs=list(df))
[,1] [,2]
A 1 2
B 7 8
请注意,它作为矩阵返回,因为默认值为SIMPLIFY = TRUE。 如果您希望将其作为列表:
> mapply(filter_by_range, filter=filter_lst, MoreArgs=list(df), SIMPLIFY=FALSE)
[[1]]
A B
1 1 7
[[2]]
A B
2 2 8
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.