[R] Completion for proto objects
Vitalie S.
vitosmail at rambler.ru
Fri Sep 11 18:39:58 CEST 2009
On Fri, 11 Sep 2009 16:07:45 +0200, Gabor Grothendieck
<ggrothendieck at gmail.com> wrote:
> See ?assignInNamespace
>
thanks for the hint. It works to some extent. Functions are redefined in
"base" but utils:::specialCompletions seems not to preform properly:
ls.proto <- function(x){ # function to complete
.local <- function(x){
if(is(x[[".super"]], "proto")) c(ls.default(x),
Recall(x[[".super"]]))
else ls.default(x)
}
unlist(.local(x))
}
ls1 <- base::ls # cache ls
ls.default1 <- function(name, pos = -1, envir = as.environment(pos),
all.names = FALSE, pattern){
UseMethod("ls")
}
assignInNamespace("ls.default", ls1 , 'base')
assignInNamespace("ls", ls.default1 , 'base')
assignInNamespace("ls.proto", ls.proto , 'base')
environment(ls) <- asNamespace('base')
environment(ls.default) <- asNamespace('base')
environment(ls.proto) <- asNamespace('base')
p1 <- proto(p1_abc=123)
p2 <- proto(.=p1, p2_abc=23423)
ls(p2)
[1] "p2_abc" "p1_abc" #works fine !!!!
> ls(p1)
[1] "p1_abc"
>
Completion for $ works fine with environments and everything else, but not
with proto objects.
also ls.str (which uses ls internally) gives an error.
> ls.str(p1)
Error in ls(name, envir = envir, all.names = all.names, pattern = pattern)
:
argument "name" is missing, with no default
>
What is going on?? My ls.proto works nicely in global env but does not
when called from attached packages?
Would really appreciate if someone can enlighten me.
Thanks a lot.
PS: I also tried to modify utils:::specialCompletions directly, did not
wok either - it's something wrong with ls.proto above :(.
> On Fri, Sep 11, 2009 at 10:02 AM, Vitalie S. <vitosmail at rambler.ru>
> wrote:
>>
>> Hello everyone,
>>
>> I am trying to implement completion for proto objects. Proto extends
>> environment in a hierarchical way. Thus completion should list all the
>> names
>> in all it's parent environments.
>>
>> For "normal" classes defining names.class would do the job, but
>> completion
>> for "environment" is hard coded in utils:::specialCompletions by means
>> of
>> base::ls(). As result defining names.proto does not work.
>>
>> I tried to make "ls" generic and to do something like:
>>
>> environment(ls.default) <- asNamespace('utils')
>> environment(ls) <- asNamespace('utils')
>> environment(ls.proto) <- asNamespace('utils')
>>
>> That does not work either.
>>
>> Is there a way to make utils:::specialCompletions use my "ls" instead of
>> "base::ls"??
>>
>> I know Deepayan Sarkar is working now on improving the completion system
>> (potentially by introducing "completion" generic). That would definitely
>> solve the problem. But for now, does a quick fix exist?
>>
>> Thanks a lot,
>> Vitalie
>>
>> ______________________________________________
>> R-help at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide
>> http://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
>>
--
More information about the R-help
mailing list