On Fri, Jan 13, 2012 at 4:57 PM, Rui Esteves <ruimaximo at gmail.com> wrote:
Hi.
I am trying to modify kmeans function.
It seems that is failing something obvious with the workspace.
I am a newbie and here is my code:
<environment: namespace:stats>
Error: unexpected '<' in "<"
Do not include the last line
<environment: namespace:stats>
it is not part of the function definition. Simply leave it out and
your function will be defined in the user workspace (a.k.a. global
environment).
HTH
Peter
On Fri, Jan 13, 2012 at 4:57 PM, Rui Esteves<ruimaximo at gmail.com> wrote:
Hi.
I am trying to modify kmeans function.
It seems that is failing something obvious with the workspace.
I am a newbie and here is my code:
<environment: namespace:stats>
Error: unexpected '<' in "<"
Do not include the last line
<environment: namespace:stats>
it is not part of the function definition. Simply leave it out and
your function will be defined in the user workspace (a.k.a. global
environment).
That's only partly right. Leaving it off will define the function in
the global environment, but the definition might not work, because
that's where it will look up variables, and the original function would
look them up in the stats namespace. I don't know if that will matter,
but it might lead to tricky bugs.
What you should do when modifying a function from a package is set the
environment to the same environment a function in the package would
normally get, i.e. to the stats namespace. I think the as.environment()
function can do this, but I always forget the syntax; an easier way is
the following:
Create the new function:
kmeansnew <- function (...) ...
Set its environment the same as the old one:
environment(kmeansnew) <- environment(stats::kmeans)
BTW, if you use the fix() function to get a copy for editing, it will do
this for you automatically.
Duncan Murdoch
Thank you both.
1) As Duncan said, if I leave <environment: namespace:stats> out, it
will not work since it is using .C and .Fortran functions that kmeans
calls.
I
2) don`t know how to use the as.environment() (I did not understood by
reading the help).
3) Setting environment(kmeansnew) <- environment(stats::kmeans) does
not work as well.
4) Using fix() works, but then I don`t know how to store just the
function in an external file. To use it in another computer, for
example. If I use save(myfunc,"myFile.R", ASCII=TRUE) it doesn't work
when I try to load it again using myfunc=load("myFile.R")
Rui
On Sat, Jan 14, 2012 at 3:22 AM, Duncan Murdoch
<murdoch.duncan at gmail.com> wrote:
On 12-01-13 8:05 PM, Peter Langfelder wrote:
On Fri, Jan 13, 2012 at 4:57 PM, Rui Esteves<ruimaximo at gmail.com> ?wrote:
Hi.
I am trying to modify kmeans function.
It seems that is failing something obvious with the workspace.
I am a newbie and here is my code:
<environment: namespace:stats>
Error: unexpected '<' in "<"
Do not include the last line
<environment: namespace:stats>
it is not part of the function definition. Simply leave it out and
your function will be defined in the ?user workspace (a.k.a. global
environment).
That's only partly right. ?Leaving it off will define the function in the
global environment, but the definition might not work, because that's where
it will look up variables, and the original function would look them up in
the stats namespace. ?I don't know if that will matter, but it might lead to
tricky bugs.
What you should do when modifying a function from a package is set the
environment to the same environment a function in the package would normally
get, i.e. to the stats namespace. ?I think the as.environment() function can
do this, but I always forget the syntax; an easier way is the following:
Create the new function:
kmeansnew <- function (...) ...
Set its environment the same as the old one:
environment(kmeansnew) <- environment(stats::kmeans)
BTW, if you use the fix() function to get a copy for editing, it will do
this for you automatically.
Duncan Murdoch
Thank you both.
1) As Duncan said, if I leave<environment: namespace:stats> out, it
will not work since it is using .C and .Fortran functions that kmeans
calls.
I
2) don`t know how to use the as.environment() (I did not understood by
reading the help).
3) Setting environment(kmeansnew)<- environment(stats::kmeans) does
not work as well.
I think you need to explain what "does not work" means. What did you
do, and how do you know it didn't work?
4) Using fix() works, but then I don`t know how to store just the
function in an external file. To use it in another computer, for
example. If I use save(myfunc,"myFile.R", ASCII=TRUE) it doesn't work
when I try to load it again using myfunc=load("myFile.R")
Don't use load() on a source file. Use load() on a binary file produced
by save(). You could save() your working function, but then you can't
edit it outside of R. To produce a .R file that you can use in another
session, you're going to need to produce the function, then modify the
environment, using 2 or 3 above.
Duncan Murdoch
All of these tries leave to the same result:
1) First I defined kmeansnew with the content of kmeans, but leaving
the <environment: namespace:stats> out.
Then I run environment(kmeansnew)<- environment(stats::kmeans) at the
command line.
2) kmeansnew <- kmeans() {.... environment(kmeansnew)<-
environment(stats::kmeans) }
3) kmeansnew <- kmeans() {....} environment(kmeansnew)<-
environment(stats::kmeans)
When I do kmeansnew(iris[-5],4) it returns:
Error in do_one(nmeth) : object 'R_kmns' not found
'R_kmns' is a .FORTRAN that is called by the original kmeans().
it is the same error as if i would just leave <environment:
namespace:stats> out.
On Sat, Jan 14, 2012 at 11:50 AM, Duncan Murdoch
<murdoch.duncan at gmail.com> wrote:
On 12-01-14 3:58 AM, Rui Esteves wrote:
Thank you both.
1) As Duncan said, if I leave<environment: namespace:stats> ?out, it
will not work since it is using .C and .Fortran functions that kmeans
calls.
I
2) don`t know how to use the as.environment() (I did not understood by
reading the help).
3) Setting environment(kmeansnew)<- environment(stats::kmeans) does
not work as well.
I think you need to explain what "does not work" means. ?What did you do,
and how do you know it didn't work?
4) Using fix() works, but then I don`t know how to store just the
function in an external file. To use it in another computer, for
example. ?If I use save(myfunc,"myFile.R", ASCII=TRUE) it doesn't work
when I try to load it again using myfunc=load("myFile.R")
Don't use load() on a source file. ?Use load() on a binary file produced by
save(). ?You could save() your working function, but then you can't edit it
outside of R. ?To produce a .R file that you can use in another session,
you're going to need to produce the function, then modify the environment,
using 2 or 3 above.
Duncan Murdoch
All of these tries leave to the same result:
1) First I defined kmeansnew with the content of kmeans, but leaving
the<environment: namespace:stats> out.
Then I run environment(kmeansnew)<- environment(stats::kmeans) at the
command line.
2) kmeansnew<- kmeans() {.... environment(kmeansnew)<-
environment(stats::kmeans) }
3) kmeansnew<- kmeans() {....} environment(kmeansnew)<-
environment(stats::kmeans)
When I do kmeansnew(iris[-5],4) it returns:
Error in do_one(nmeth) : object 'R_kmns' not found
'R_kmns' is a .FORTRAN that is called by the original kmeans().
it is the same error as if i would just leave<environment:
namespace:stats> out.
Number 1 is what you should do. When you do that and print kmeansnew in
the console, does it list the environment at the end? What does
environment(kmeansnew) print?
Duncan Murdoch
On Sat, Jan 14, 2012 at 11:50 AM, Duncan Murdoch
<murdoch.duncan at gmail.com> wrote:
On 12-01-14 3:58 AM, Rui Esteves wrote:
Thank you both.
1) As Duncan said, if I leave<environment: namespace:stats> out, it
will not work since it is using .C and .Fortran functions that kmeans
calls.
I
2) don`t know how to use the as.environment() (I did not understood by
reading the help).
3) Setting environment(kmeansnew)<- environment(stats::kmeans) does
not work as well.
I think you need to explain what "does not work" means. What did you do,
and how do you know it didn't work?
4) Using fix() works, but then I don`t know how to store just the
function in an external file. To use it in another computer, for
example. If I use save(myfunc,"myFile.R", ASCII=TRUE) it doesn't work
when I try to load it again using myfunc=load("myFile.R")
Don't use load() on a source file. Use load() on a binary file produced by
save(). You could save() your working function, but then you can't edit it
outside of R. To produce a .R file that you can use in another session,
you're going to need to produce the function, then modify the environment,
using 2 or 3 above.
Duncan Murdoch