Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 使用assign()处理作用域问题是一个问题吗?_R_Scope_Assign - Fatal编程技术网

R 使用assign()处理作用域问题是一个问题吗?

R 使用assign()处理作用域问题是一个问题吗?,r,scope,assign,R,Scope,Assign,当包含在自定义函数中时,RVAideMemoire::Anova.clm 找不到传递给ordinal::clm的“df1”数据对象(看起来 因为它在全局环境中搜索“df1”: LyzandeR在这方面的回答意味着将“df1”分配给函数外部的全局环境是一条可行的道路 但我想知道,从函数内部使用assign是否有潜在的问题,如我所示 如果是,是否有方法指示RVAideMemoire::Anova.clm在执行环境中搜索“df1” library(ordinal) library(RVAideMemo

当包含在自定义函数中时,
RVAideMemoire::Anova.clm
找不到传递给
ordinal::clm
的“df1”数据对象(看起来 因为它在全局环境中搜索“df1”:

LyzandeR在这方面的回答意味着将“df1”分配给函数外部的全局环境是一条可行的道路

但我想知道,从函数内部使用
assign
是否有潜在的问题,如我所示

如果是,是否有方法指示
RVAideMemoire::Anova.clm
在执行环境中搜索“df1”

library(ordinal)
library(RVAideMemoire)

set.seed(1)
df <- data.frame(x = factor(sample(1:2, 100, replace=TRUE)), 
                 y = factor(sample(1:5, 100, replace=TRUE), ordered=TRUE))

clm_function <- function(dv, gv, df1){
  model <- ordinal::clm(as.formula(paste0(dv, " ~ ", gv)), data = df1)
  result <- RVAideMemoire::Anova.clm(model, type = "II") 
  return(result)
}

clm_function(dv = "y", gv = "x", df1 = df)
clm_function_alt <- function(dv, gv, df1){
  assign("df1", df1, envir=globalenv()) # ASSIGN HERE
  model <- ordinal::clm(as.formula(paste0(dv, " ~ ", gv)), data = df1)
  result <- RVAideMemoire::Anova.clm(model, type = "II") 
  rm(df1, pos = 1) # REMOVE HERE
  return(result)
}

clm_function_alt(dv = "y", gv = "x", df1 = df)