应用应创建变量的函数后,变量未显示

Variable's don't show up after applying a function that should create a variable

下面有这段代码,但它没有产生我期望的结果。

我希望当我 运行 这段代码时,我会在环境选项卡中创建两个新变量:x_num 和 x_vector。 x_vector 将是从 0.01 到 20.0 的 2000 个值的向量,但这不会显示。

怎么会这样?

x_num <- 2000
x_step <- 0.01
INFSMALL <- 1e-4
B <- 20

CreateLocation <- function() 
{
  seq(x_num)*x_step
}

Initialization <- function()
{
  x_num    <- as.integer((B+INFSMALL)/x_step)
  x_vector <- CreateLocation()
}
Initialization()

?"<<-" 给出 运算符“<<-”和“->>”通常仅在函数中使用,并导致通过父环境搜索现有定义被分配的变量。如果找到这样的变量(并且其绑定未锁定),则重新定义其值,否则在全局环境中进行赋值。

Initialization <- function()
{
  x_num    <<- as.integer((B+INFSMALL)/x_step)
  x_vector <<- CreateLocation()
}
Initialization()
str(x_vector)
# num [1:2000] 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 ...

不鼓励从函数内部写入全局环境,您应该 return 从函数中获取您需要的值。如果有多个值,您需要 return 一个列表。

Initialization <- function()
{
  x_num    <- as.integer((B+INFSMALL)/x_step)
  x_vector <- CreateLocation()
  list(x_num = x_num, x_vector = x_vector)
}

result <- Initialization()

result 的列表长度为 2,您可以使用 result$x_numresult$x_vector 访问单个项目。如果绝对有必要将它们作为单独的变量 x_numx_vector 您可以使用 list2env.

list2env(result, .GlobalEnv)