Dear R community,
I have a problem when I use functions as default values for argumnents
in other functions. When I use curly brackets { here, I can not create a
package with inlinedocs. It will give me the error when using
package.skeleton() in my package structure:
Error in parse(text = utxt) : <text>:4:0: unexpected end of input
For example:
dummyfunction = function(filters = function(x) {b = 0; x > b} ))
{
# rest of code here
return(filters)
}
This seems to me as a legal function declaration but creates the above
mentioned error. Is this an error of inlinedocs or do I misunderstand
the R language? Or is there another way of using functions in such a way
as arguments? In this case I could easily define this filters argument
inside the function for cases when it is not supplied as an argument but
I have some more complex functions where I really need to define
something sequential as an argument like:
dummyfunction = function(filters = {a = 1; b > a; b}) {print('test')}
I hope I could clarify my problem.
Thanks a lot
Jannis
functions as arguments to ther functions with inlinedocs
5 messages · Duncan Murdoch, Rui Barradas, Jannis
On 24/01/2013 1:32 PM, Jannis wrote:
Dear R community,
I have a problem when I use functions as default values for argumnents
in other functions. When I use curly brackets { here, I can not create a
package with inlinedocs. It will give me the error when using
package.skeleton() in my package structure:
Error in parse(text = utxt) : <text>:4:0: unexpected end of input
For example:
dummyfunction = function(filters = function(x) {b = 0; x > b} ))
{
# rest of code here
return(filters)
}
This seems to me as a legal function declaration but creates the above
mentioned error. Is this an error of inlinedocs or do I misunderstand
the R language?
The definition above is not syntactically correct, it has an extra
closing paren on the first line. This would be correct:
dummyfunction = function(filters = function(x) {b = 0; x > b} )
{
# rest of code here
return(filters)
}
If that still confuses inlinedocs, then it's a bug in that package. This
might be easier for it to handle:
dummyfunction = function(filters)
{
if (missing(filters)) filters <- function(x) {b = 0; x > b}
# rest of code here
return(filters)
}
and it should be equivalent to the original.
Or is there another way of using functions in such a way
as arguments? In this case I could easily define this filters argument
inside the function for cases when it is not supplied as an argument but
I have some more complex functions where I really need to define
something sequential as an argument like:
dummyfunction = function(filters = {a = 1; b > a; b}) {print('test')}
That's a pretty strange definition. I would have written it as
dummyfunction = function(filters = b) {
{ a = 1
b > a
b
print('test')
}
Remember that defaults for function arguments are evaluated in the evaluation frame of the function, not
in the caller's evaluation frame, so they don't need to exist when you enter the function, only when you first use the associated argument.
Duncan Murdoch
Hello,
Your function declaration has a syntax error, one left parenthesis too
much. Corrected it would be
dummyfunction <- function(filters = function(x) {b = 0; x > b} ){
# rest of code here
filters # this returns a function, don't need return()
}
x <- -5:5
f <- dummyfunction() # this creates the default function
f(x)
g <- dummyfunction(mean) # this creates another function
g(x)
As you can see, you can use default functions as arguments in your
function declaration.
Hope this helps,
Rui Barradas
Em 24-01-2013 18:32, Jannis escreveu:
Dear R community,
I have a problem when I use functions as default values for argumnents
in other functions. When I use curly brackets { here, I can not create a
package with inlinedocs. It will give me the error when using
package.skeleton() in my package structure:
Error in parse(text = utxt) : <text>:4:0: unexpected end of input
For example:
dummyfunction = function(filters = function(x) {b = 0; x > b} ))
{
# rest of code here
return(filters)
}
This seems to me as a legal function declaration but creates the above
mentioned error. Is this an error of inlinedocs or do I misunderstand
the R language? Or is there another way of using functions in such a way
as arguments? In this case I could easily define this filters argument
inside the function for cases when it is not supplied as an argument but
I have some more complex functions where I really need to define
something sequential as an argument like:
dummyfunction = function(filters = {a = 1; b > a; b}) {print('test')}
I hope I could clarify my problem.
Thanks a lot
Jannis
______________________________________________ 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.
Hello, Sorry, it's RIGHT parenthesis. Rui Barradas Em 24-01-2013 18:54, Rui Barradas escreveu:
Hello,
Your function declaration has a syntax error, one left parenthesis too
much. Corrected it would be
dummyfunction <- function(filters = function(x) {b = 0; x > b} ){
# rest of code here
filters # this returns a function, don't need return()
}
x <- -5:5
f <- dummyfunction() # this creates the default function
f(x)
g <- dummyfunction(mean) # this creates another function
g(x)
As you can see, you can use default functions as arguments in your
function declaration.
Hope this helps,
Rui Barradas
Em 24-01-2013 18:32, Jannis escreveu:
Dear R community,
I have a problem when I use functions as default values for argumnents
in other functions. When I use curly brackets { here, I can not create a
package with inlinedocs. It will give me the error when using
package.skeleton() in my package structure:
Error in parse(text = utxt) : <text>:4:0: unexpected end of input
For example:
dummyfunction = function(filters = function(x) {b = 0; x > b} ))
{
# rest of code here
return(filters)
}
This seems to me as a legal function declaration but creates the above
mentioned error. Is this an error of inlinedocs or do I misunderstand
the R language? Or is there another way of using functions in such a way
as arguments? In this case I could easily define this filters argument
inside the function for cases when it is not supplied as an argument but
I have some more complex functions where I really need to define
something sequential as an argument like:
dummyfunction = function(filters = {a = 1; b > a; b}) {print('test')}
I hope I could clarify my problem.
Thanks a lot
Jannis
______________________________________________ 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.
______________________________________________ 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.
Dear Duncan, dear Rui, thanks for your replies. You are correct regarding the additional paranthesis. I probably copied the wrong code. I, however, get this inlinedocs error with the correct version. After contacting the package maintainer I think this is now added to inlinedocs list of bugs. Thanks agian for replies! Jannis
On 24.01.2013 20:02, Rui Barradas wrote:
Hello, Sorry, it's RIGHT parenthesis. Rui Barradas Em 24-01-2013 18:54, Rui Barradas escreveu:
Hello,
Your function declaration has a syntax error, one left parenthesis too
much. Corrected it would be
dummyfunction <- function(filters = function(x) {b = 0; x > b} ){
# rest of code here
filters # this returns a function, don't need return()
}
x <- -5:5
f <- dummyfunction() # this creates the default function
f(x)
g <- dummyfunction(mean) # this creates another function
g(x)
As you can see, you can use default functions as arguments in your
function declaration.
Hope this helps,
Rui Barradas
Em 24-01-2013 18:32, Jannis escreveu:
Dear R community,
I have a problem when I use functions as default values for argumnents
in other functions. When I use curly brackets { here, I can not create a
package with inlinedocs. It will give me the error when using
package.skeleton() in my package structure:
Error in parse(text = utxt) : <text>:4:0: unexpected end of input
For example:
dummyfunction = function(filters = function(x) {b = 0; x > b} ))
{
# rest of code here
return(filters)
}
This seems to me as a legal function declaration but creates the above
mentioned error. Is this an error of inlinedocs or do I misunderstand
the R language? Or is there another way of using functions in such a way
as arguments? In this case I could easily define this filters argument
inside the function for cases when it is not supplied as an argument but
I have some more complex functions where I really need to define
something sequential as an argument like:
dummyfunction = function(filters = {a = 1; b > a; b}) {print('test')}
I hope I could clarify my problem.
Thanks a lot
Jannis
______________________________________________ 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.
______________________________________________ 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.