我正在尝试编写一个函数来完成一项特定的工作(在我的例子中,分析异常值的数据集),所以我想要做的第一件事就是看看其他人是如何完成类似的工作的.
我可以这样做来加载一个特定的包并检查一个函数的代码,但是一些函数似乎依赖于你抛出的对象类
>library(outliers)
> fix(outlier)
function (x, opposite = FALSE, logical = FALSE)
{
if (is.matrix(x))
apply(x, 2, outlier, opposite = opposite, logical = logical)
else if (is.data.frame(x))
sapply(x, outlier, opposite = opposite, logical = logical)
else {
if (xor(((max(x) - mean(x)) < (mean(x) - min(x))), opposite)) {
if (!logical)
min(x)
else x == min(x)
}
else {
if (!logical)
max(x)
else x == max(x)
}
}
}
Run Code Online (Sandbox Code Playgroud)
你如何看待根据对象改变的代码?
编辑:
好吧,Palm < - 面子.我作为一个例子使用的函数只调用它自己,但是他的代码就在那里......我已经看到了其他的例子(但是不能想到任何随便的)函数确实做了其他事情,这取决于抛出的对象的类在它,所以问题,即使这是一个坏的例子!
我有一堆格式的日期,yyyy-mm-dd
我想将它们转换为一年中的季度的yyyy-q
格式qq
(所以月 1, 2, 3 映射到 q=1 和 4, 5, 6 映射到 q =2 等)。我使用以下函数来完成此操作:
get_month <- function(d) { return(as.numeric(format(d, "%m")))}
get_qtr <- function(d) {
f <- function(m) {
if (m %in% c(1,2,3)) { return(1) }
else if (m %in% c(4,5,6)) { return(2) }
else if (m %in% c(7,8,9)) { return(3) }
else if (m %in% c(10,11,12)) { return(4) }
}
m <- get_month(d)
r <- sapply(m, f)
return(r)
}
Run Code Online (Sandbox Code Playgroud)
然而,这是非常缓慢的。有没有更快的方法来做到这一点?