我正在使用R中的pet project构建一个名为groupr
的自定义S3类。我已经使用点符号(print.groupr
,subset.groupr
)编写了一些函数,如Hadley tutorial中所述,但我会喜欢来扩展{{1}功能,但找不到办法。
如教程中所示,apply
包提供了一个提示。我看到pryr
和subset
函数是不同的函数类型,如下所示:
print
此外,> pryr::ftype(subset)
[1] "s3" "generic"
> pryr::ftype(apply)
[1] "function"
功能在终端中打印出来:
subset
但是function (x, ...)
UseMethod("subset")
<bytecode: 0x115f0ab88>
<environment: namespace:base>
函数会打印出它的完整源代码。我相信我明白为什么会发生这种情况 - apply
,print
,subset
等功能是S3功能而plot
是一个无聊的旧功能正常函数 - 但我没有看到任何方法扩展apply
函数而不“覆盖”基函数。例如,apply
在加载包时将函数调用指向我的UseMethod("apply")
命名空间。
有谁知道如何解决这个问题?也就是说,groupr
函数族不是S3对象,不能使用点表示法扩展。有谁知道如何写apply
,apply.myclass
函数?
答案 0 :(得分:1)
你大部分都在那里;您需要覆盖原始import java.io.IOException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import de.sample.spring.component.MyComponent;
public class Start {
private static final Logger LOGGER = LoggerFactory.getLogger(Start.class);
private final static String contextPath = "/context/applicationContext.xml";
public static void main(String[] args) throws IOException {
ApplicationContext context = null;
try {
context = new ClassPathXmlApplicationContext(contextPath);
} catch (Exception e) {
LOGGER.error("",e);
}
MyComponent myComponent = (MyComponent) context.getBean("myComponent");
myComponent.showWhenExternalCalledMyService();
}
}
,但使用将原始调用为默认值的通用函数。因此,您的程序包将具有三个功能:apply
,它将是新的通用apply
,它将调用apply.default
,以及您的新base::apply
。加载您的软件包后,您的apply.myclass
版本在搜索路径中会更高,因此会被使用。我确定我已经看到过这样做但是现在不能举手示例。
apply
的版本为groupr
?我们都知道apply_groupr
在矩阵上使用的是什么以及这个新功能是否足够相似以共享相同的名称?那就是如果我看到apply
我会感到困惑,因为apply(my_groupr, 2, mean)
不是矩阵吗?