Dear All,

I have some problems and some questions regarding how to pass some checks (run 
on my computer - new version not yet submitted).

There are 2 important notes:

1. Note 1:
checking S3 generic/method consistency ... NOTE
  Apparent methods for exported generics not registered:
    centres.ppRoll

2. Note 2:
checking Rd \usage sections ... NOTE
  S3 methods shown with full name in Rd file 'centres.ppRoll.Rd':
    'centres.ppRoll'

The current code is on GitHub:
https://github.com/discoleo/Rpdb

But let me first explain the reason and reasoning.

There are 2 generic functions: centres and centres.ppRoll, each with 3 methods 
for pdb objects, atoms and coords (default).

Generic function centres:
The 1st generic function, centres, computes the centres of a molecule and has 
methods for 3 objects: pdb molecule, atoms and xyz-coordinates (default). It 
acts on an object of type coords, while the objects atoms and pdb include such 
a coords-object in their structure.

I would like to write various "specialised" versions:
- they still compute the centre, as it's the simplest summary possible for 3D 
objects;
- however, there are many types of molecules: proteins, nucleic acids, other 
types of molecules; and each may benefit from more "specialised" methods;
Note: all molecules are still coded as a pdb object. It's the user who selects 
which method is most appropriate for a specific situation/molecule.

E.g. proteins consist of long linear chains. One such variant would be a 
"rolling mean": it makes sense for polypeptide chains and nucleic acids, but 
little (or no) sense for other molecules.

I wrote therefore a generic function centres.ppRoll with 3 methods for the 3 
base-objects.

I would like to reuse the centres-skeleton for the name: users can then easily 
check which methods are available to compute centres:
methods(centres)
# [1] centres.atoms          centres.coords         centres.pdb
# centres.ppRoll
# [5] centres.ppRoll.atoms   centres.ppRoll.default centres.ppRoll.pdb

I would like to avoid having hundreds of function names which no-one remembers 
and which would be cumbersome to search for. Each method would be useful only 
in particular situations and users are likely to forget the exact names between 
uses.

I get the above 2 notes with this approach:
- I did not register centres.ppRoll as an S3 method to avoid the 2nd note;
- I get the 2nd note anyway (and it gets silently registered, which may be 
necessary for the methods-search to work);

Another pseudo-solution would be to add a methods argument. This solution is 
misused at times; unfortunately, it is really ugly here because some of the 
methods may have particular arguments (e.g. window-size for the roll-method).

Ultimately, I may end up with 50 or 100 arguments in the function, which I also 
need to replicate to all the 3 methods (pdb, atoms, default/coords).

I really don't like this pseudo-solution and prefer one based on the 1st 
approach.

I did not count how many function name variants are in the > 20,000 packages on 
CRAN. But I think that a more structured approach would be beneficial to 
everyone.

Thanks in advance for any support,

Leonard

##########

### Note
- Proteins have a backbone and the amino-acids also have side chains;
- It is useful in certain situations to have additional types of centres 
computed;
- The initial developer of Rpdb used it mainly for other types of molecules 
(not proteins);

The code actually functions:

# pdb2z81.ent can be downloaded from the Protein Data Bank;
setwd(...)
x = read.pdb("pdb2z81.ent")
# Number of models:  0
# Warning message:
# In read.pdb("pdb2z81.ent") : The pdb contains a Caveat record!
tmp = centres.ppRoll(x)
visualize(x, type="p", pbc.box = FALSE)
# Draw a peptide-"Skeleton"
lines3d(tmp, lwd = 5, col = "red")

# A new version of the pdb-format is also out,
# but that's a horror-story in itself.


        [[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