Sharon, Luke noted that (somewhat strangely [1]) {ape} is exporting the registered entry point for that routine, so you should just be able to do:
importFrom(ape,seq_root2tip) and be on your way. [1] ?ape::seq_root2tip notes that "other packages" use it, but none of those are on CRAN, could be a Bioconductor thing: https://github.com/search?q=org%3Acran+%2Fseq_root2tip%5Cb%2F+lang%3AR+-repo%3Acran%2Fape&type=code Mike C On Fri, Jul 4, 2025 at 4:03 PM Sharon Bewick <sbew...@clemson.edu> wrote: > So I think the only solution that CRAN will accept is linking against > headers. I can download an ape.h header file, but for the life of me, I’m > having trouble figuring out how to link it in my R package. I’ve read what > I can find online, but haven’t been successful. Right now, I have the ape.h > file in an src folder. I also have > > LinkingTo: Rcpp, ape > > In my DESCRIPTION file > > > > But I’m getting all sorts of errors. Does anyone have an example of how I > can do this that I might be able to work from? > > > > Thanks in advance!!!! > > Sharon > > > > > > *From: *Iris Simmons <ikwsi...@gmail.com> > *Date: *Thursday, July 3, 2025 at 5:11 PM > *To: *Sharon Bewick <sbew...@clemson.edu> > *Cc: *Michael Chirico <michaelchiri...@gmail.com>, R Package Development < > r-package-devel@r-project.org> > *Subject: *Re: [R-pkg-devel] Two errors > > This Message Is From An External Sender: Use caution when opening links or > attachments if you do not recognize the sender. > > I believe the suggestion was that you should alternatively write: > > .Call("seq_root2tip", nt$edge, length(nt$tip.label), nt$Nnode, PACKAGE = > "ape") > > however, that generates the following note that CRAN is very unlikely to > accept: > > * checking foreign function calls ... NOTE > Foreign function call to a different package: > .Call("seq_root2tip", ..., PACKAGE = "ape") > See chapter 'System and foreign language interfaces' in the 'Writing R > Extensions' manual. > > The other possibility is adding: > > importFrom(ape, seq_root2tip) > > to your NAMESPACE and not modifying your code, but that generates a > different note: > > * checking foreign function calls ... NOTE > Registration problem: > symbol 'seq_root2tip' not in namespace: > .Call(seq_root2tip, ...) > See chapter 'System and foreign language interfaces' in the 'Writing R > Extensions' manual. > > Your best bet is to ask the maintainers of package:ape to add and > export an R function like this: > > idk <- function (...) > .Call(seq_root2tip, ...) > > There are also ways to do it in C using R_RegisterCCallable and > R_GetCCallable but that might be too complicated for something like > this. > > On Thu, Jul 3, 2025 at 6:33 PM Sharon Bewick <sbew...@clemson.edu> wrote: > > > > Thanks so much for the tips! > > > > I think I’ve fixed #2. But I’m not sure what you mean by #1. Where > should the "seq_root2tip" with PACKAGE="ape" go? In the NAMESPACE file? In > the Description file? Somewhere in the code? > > > > So sorry for not understanding! > > > > Thanks! > > Sharon > > > > From: Michael Chirico <michaelchiri...@gmail.com> > > Date: Thursday, July 3, 2025 at 4:13 PM > > To: Sharon Bewick <sbew...@clemson.edu> > > Cc: R Package Development <r-package-devel@r-project.org> > > Subject: Re: [R-pkg-devel] Two errors > > > > This Message Is From An External Sender: Use caution when opening links > or attachments if you do not recognize the sender. > > 1. all functions in R are variables. You can "trick" code tools by > writing seq_root2tip=NULL in the same scope but consider (a) C routines are > typically part of a package's private interface (b) it might be preferable > to use the string "seq_root2tip" with PACKAGE="ape" > > > > 2. phytree is not the same as phytree<- : importFrom(phyloseq, > "phytree<-") is what you want assuming it's exported) > > > > (c.f. `x = phyteee(...)` vs. `phytree(x) <- ...`) > > > > Mike C > > On Thu, Jul 3, 2025, 2:57 PM Sharon Bewick <sbew...@clemson.edu<mailto: > sbew...@clemson.edu>> wrote: > > 1. I’m trying to upload my R package. However, I use the ape function > seq_root2tip but for the sake of speed am calling it using .Call: > > > > toroot<-.Call(seq_root2tip, nt$edge, length(nt$tip.label), nt$Nnode) > > > > How do I get R to recognize the seq_root2tip function from ape in this C > call? It is throwing up a NOTE that is getting my package rejected: > > > > shade_branch: no visible binding for global variable ‘seq_root2tip’ > > > > but seq_root2tip is a function, not a global variable. > > > > 2. I’m also getting a NOTE about: no visible global function definition > for ‘phy_tree<-’ > > > > I have declared phy_tree in the NAMESPACE file: > importFrom(phyloseq,phy_tree) > > > > I don’t know what the problem is… > > > > Thanks! > > Sharon > > > > [[alternative HTML version deleted]] > > > > ______________________________________________ > > R-package-devel@r-project.org<mailto:R-package-devel@r-project.org> > mailing list > > > https://stat.ethz.ch/mailman/listinfo/r-package-devel > <https://stat.ethz.ch/mailman/listinfo/r-package-devel> > > > > [[alternative HTML version deleted]] > > > > ______________________________________________ > > R-package-devel@r-project.org mailing list > > > https://stat.ethz.ch/mailman/listinfo/r-package-devel > <https://stat.ethz.ch/mailman/listinfo/r-package-devel> > [[alternative HTML version deleted]] ______________________________________________ R-package-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-package-devel