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)