为什么这个简单的功能不起作用?

Nee*_*raj 2 r function

我首先定义了新变量x,然后x在其体内创建了需要的函数(而不是参数).见下面的代码

x <- c(1,2,3)
f1 <- function() {
  x^2
}

rm(x)

f2 <- function() {
  x <- c(1,2,3)
  f1()
}

f(2)  
Error in f1() : object 'x' not found
Run Code Online (Sandbox Code Playgroud)

当我删除x并定义f2了首先定义x然后执行的新函数时f1,它会显示x未找到的对象.

我只是想知道为什么这不起作用以及如何克服这个问题.我不想x成为名字作为参数f1.

请提供适当的标题,因为我不知道这是什么问题.

Joh*_*man 6

您可以使用闭包来创建f1具有所需属性的闭包:

makeF <- function(){
  x <- c(1,2,3)
  f1 <- function() {
    x^2
  }
  f1
}

f1 <- makeF()
f1() #returns 1 4 9
Run Code Online (Sandbox Code Playgroud)

x在全球范围内没有,但f1仍然知道x它所定义的环境.