首先声明一个函数,然后在R中定义它

首先声明一个函数,然后在R中定义它,r,function,R,Function,我是R新手。是否可以先声明一个函数,然后在RStudio的R中定义它 函数定义很长,我想声明它,然后像这样定义它: f2 <- function() fn <- function(a,b, c, d, q1) { print(a) print(b) print(c) print(d) print(q1) f2() # originally, it is named as f1 } x <- 6 y <- 10 z &

我是R新手。是否可以先声明一个函数,然后在RStudio的R中定义它

函数定义很长,我想声明它,然后像这样定义它:

f2 <- function()

fn <- function(a,b, c, d, q1)
{
    print(a)
    print(b)
    print(c)
    print(d)
    print(q1)
    f2()   # originally, it is named as f1
}

x <- 6
y <- 10
z <- 58
v <- 20 
v1 <- 68 
fn(x,y , c=z, d=v, q1=v1)
f2 <- function()
{
   print("here is f2 definition")
}

f2这是我运行您的代码得到的结果:

> f2 <- function()
+ 
+ fn <- function(a,b, c, d, q1)
+ {
+     print(a)
+     print(b)
+     print(c)
+     print(d)
+     print(q1)
+     f2()   # originally, it is named as f1
+ }
> 
> f2()
> x <- 6
> y <- 10
> z <- 58
> v <- 20 
> v1 <- 68 
> fn(x,y , c=z, d=v, q1=v1)
Error: could not find function "fn"
>f2()
>xyzv1fn(x,y,c=z,d=v,q1=v1)
错误:找不到函数“fn”

你的意思是在
f2
中定义
fn
?如果是,那么您的全局环境中就没有
fn
,尝试
fn(x,y,c=z,d=v,q1=v1)
是毫无意义的。如果你不明白为什么
fn
是在
f2
中定义的,并且无法从全球环境中访问,那么我认为最好的建议可能是首先获得一本关于R的好书。你想要实现什么?

你的问题对我来说并不完全清楚。由于R未编译,因此更改在另一个函数中调用的函数的定义将产生预期的效果。如果您运行上面的代码(通过一些更改使其工作…),然后再次调用
fn
,它将使用新定义的
f2
。请尝试在新的R会话中运行代码。@krlmlr,即使我在新会话中运行它,它也找不到f2()。谢谢你怎么找不到f2?您确定上面的代码正是您在R会话中运行的代码吗?我不这么认为,因为如果我运行这段代码,我在查找f2时没有问题。(fn首先在f2中定义,因此它不直接可见,但原因很清楚)。