On 21/04/2011 10:52 AM, Sean Robert McGuffee wrote:
Thanks,
That's great, but I don't know how to determine what foo is. How do I
declare the name of the package?

See the Writing R Extensions manual, or a tutorial on the topic, e.g. the one I gave at UseR 2008, available here:

www.r-project.org/conferences/*useR-2008*/slides/*Murdoch*.pdf
*
*It contains a few things that are no longer true (e.g. you don't need Perl any more), but is mostly still accurate.

Duncan Murdoch

On 4/21/11 7:16 AM, "Duncan Murdoch"<murdoch.dun...@gmail.com>  wrote:

>  On 11-04-20 11:33 AM, Sean Robert McGuffee wrote:
>>  Hi, apparently I sent my question about using R and C++ to the wrong list,
>>  ironically seeing as that list was called Rcpp. Anyway, I was directed to
>>  post my question here. To summarize my current question, I have found two
>>  commands that I want to be able to put into a package. The commands are 'R
>>  CMD SHLIB X.cc X_main.cc' and
>>  'dyn.load(paste("X",.Platform$dynlib.ext,sep="")),' which I would like to
>>  run when my package is installed and maybe have the second command run again
>>  when my package is to be used. I've been trying to figure out the
>>  documentation and learn through examples, but I'm just not getting it and
>>  have been trying for weeks.
>>  Does anyone on this site have any suggestions for me?
>
>  Assuming those lines work on their own, just do the following:
>
>  1.  Put those *.cc files into the src directory of your package.  (You
>  may need to create it.)
>
>  2.  Put useDynLib(foo) into the NAMESPACE file of your foo package.
>
>  3.  Call those functions using .C("X", args, PACKAGE="foo").
>
>  That's it.
>
>  Duncan Murdoch
>
>>  Thanks, Sean
>>
>>  |On 20 April 2011 at 10:20, Sean Robert McGuffee wrote:
>>  |
>>  |
>>  | Hi, thanks!
>>  |
>>  |>On 4/20/11 10:03 AM, "Steve Lianoglou"<mailinglist.honey...@gmail.com>
>>  wrote:
>>  |>   Hi,
>>  |>
>>  |>   On Wed, Apr 20, 2011 at 9:49 AM, Sean Robert McGuffee
>>  |>   <sean.mcguf...@gmail.com>   wrote:
>>  |>>   Hi, I have a quick couple of questions about some of the documentation
>>  on
>>  |>>   the web page:
>>  |>>
>>  http://cran.r-project.org/doc/manuals/R-exts.html#Linking-GUIs-and-other-fro
>>  n
>>  |>>   t_002dends-to-R
>>  |>>   under the heading:
>>  |>>   5.6 Interfacing C++ code
>>  |>>
>>  |>>   Question 1:
>>  |>>   If I¹m at a terminal, I can type the instructions they suggest:
>>  |>>   R CMD SHLIB X.cc X_main.cc
>>  |>>   If I wanted a package to do this, how would I tell the package to do
>>  that
>>  |>>   same thing?
>>  |>
>>  |>   Just to make sure we're all on the same page, you want an R package to
>>  |>   compile some source code into a shared library/dll from inside R?
>>  |>
>>  |>   Not sure if there's a "baked in" way for that to happen, but maybe you
>>  |>   can invoke `R CMD WHATEVER` from inside R using the `system` function:
>>  |>
>>  |>   R>   ?system
>>  |>
>>  |
>>  | ok, so where in the package would I put the system call in the package to
>>  | have it run when installing the package?
>>
>>>  You don't. As I said, 'R CMD INSTALL' et all do that.
>>>  Download an existing package with source, install it.  Study its sources,
>>>  study the 'Writing R Extensions' manual.  Ask on r-devel.
>>>  Basic R questions are off-topic here.
>>
>>  |>>   Would I use the same command and just include it in a file somewhere 
in
>>  the
>>  |>>   package?
>>  |>>   If so, which file?
>>  |>
>>  |>   Hmm ... I'm curious what you're trying to do, exactly?
>>  |
>>  | I'm trying to figure out how take commands such as " R CMD SHLIB X.cc
>>  | X_main.cc" followed by "dyn.load(paste("X", .Platform$dynlib.ext, sep =
>>  | ""))," which are commands I can get to work for myself as a human
>>  | interactively, and put the commands into a package to be automatically run
>>  | when installing the package. I mean, it's great if I can compile a c++
>>  file
>>  | and then use it inside R, but I'm only doing that so I can let other
>>  people
>>  | do that via a package. As much as I read this documentation, I keep
>>  missing
>>
>>>  Again, I like working from an existing, working package. As I said, there
>>>  are
>>>  almost 1000 to pick from.
>>>  Please direct follow-ups that have no bearing on Rcpp to r-devel.
>>>  Dirk
>>
>>  I've tried to figure this out for weeks by looking at other packages and
>>  reading the confusing and nonintegrated documentation, but it hasn't taught
>>  me how to put the two commands into a package so that they are run when the
>>  package is installed. I'm simply trying to find out where in my package I
>>  should put the commands 'R CMD SHLIB X.cc X_main.cc' and
>>  'dyn.load(paste("X",.Platform$dynlib.ext,sep="")),'
>>  in order to have them run when my package is installed.
>>
>>
>>  | the connections between the different sections. This is a section I am
>>  | loving because it works very well. Thus, I want to figure out how to take
>>  | the baby steps I'm doing and combine them into a package. Specifically, I
>>  | want to take these two commands and insert them into a package so that
>>  these
>>  | commands will compile my code and make a dynamic ".so" file where R can
>>  | access its functions when others install my package.
>>  |
>>  |>
>>  |>>   Question 2:
>>  |>>   dyn.load(paste("X", .Platform$dynlib.ext, sep = ""))
>>  |>>
>>  |>>   Where does .Platform$dynlib.ext come from?
>>  |>>   What does it mean?
>>  |>>   What do it¹s components .Platform and $dynlib and .ext mean?
>>  |>
>>  |>   .Platform is lust a normal list -- it is defined internally (I guess).
>>  |>   You can access "named" elements of a list with `$`.
>>  |>
>>  |>   .Platform$dynlyb (or .Platform[['dynlib']]) tells you the extension
>>  |>   your particular system uses for shared libraries:
>>  |>
>>  |>   R>   .Platform
>>  |>   $OS.type
>>  |>   [1] "unix"
>>  |>
>>  |>   $file.sep
>>  |>   [1] "/"
>>  |>
>>  |>   $dynlib.ext
>>  |>   [1] ".so"
>>  |>
>>  |>   $GUI
>>  |>   [1] "X11"
>>  |>
>>  |>   $endian
>>  |>   [1] "little"
>>  |>
>>  |>   $pkgType
>>  |>   [1] "mac.binary.leopard"
>>  |>
>>  |>   $path.sep
>>  |>   [1] ":"
>>  |>
>>  |>   $r_arch
>>  |>   [1] "x86_64"
>>  |>
>>  |>   See ?.Platform for more help.
>>  |
>>  | Ah, thanks, that clarifies exactly what .Platform$dynlib.ext is, it's
>>  ".so"
>>  | on my system.
>>  |
>>  | This, the dyn.load(paste("X", .Platform$dynlib.ext, sep = "")) is
>>  equivalent
>>  | to the command dyn.load("X.so) which now makes sense in that context!
>>  |
>>  |
>>  | _______________________________________________
>>  | Rcpp-devel mailing list
>>  | rcpp-de...@lists.r-forge.r-project.org
>>  | https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel
>>
>



______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to