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

Reply via email to