在改变环境后,功能不起作用

时间:2017-09-12 19:14:42

标签: r function environment

我想调用增援来帮助解决此错误,如下所示:

首先我创建了我的环境:

envizito <- new.env(parent = emptyenv())
attr(envizito, "name") <- "envizito"

并分配了一个名为aaa的新变量:

envizito$aaa <- 12

我创建了一个函数:

FUNn <- function() {print(envizito$aaa)}

environment(FUNn)
# <environment: R_GlobalEnv>

然后,我将其环境更改为envizito

environment(FUNn) <- envizito

environment(FUNn)
# <environment: 0xc20b0a8>
#attr(,"name")
#[1] "envizito"

但是在致电FUNn()后,它显示以下错误:

FUNn()
# Error in { : could not find function "{"

PS:虽然environment(FUNn)指向内存中的相同位置,但在我拨打ls()

时它并没有出现
ls(envir = envizito, all.names = TRUE)
# [1] "aaa"

任何意见和建议将不胜感激! 谢谢你的关注。

1 个答案:

答案 0 :(得分:5)

add_shortcode("custom_pdf_entries", array($this,'custom_get_form_entry')); /* * Get All PDF from Form exclude those we dont want */ function custom_get_form_entry($atts){ $search_arg = array( 'status' => 'active', 'field_filters' => array( 'mode' => 'all', array( 'key' => 'created_by', 'value' => get_current_user_id() ) ) ); $sorting = array( 'key' => '1', 'direction' => 'ASC' ); $all_forms = GFAPI::get_forms(); $excluded_id = explode("," , $atts['exclude']); ob_start(); foreach($all_forms as $key => $a_val){ if( !in_array($a_val['fields'][0]->formId, $excluded_id) ){ $entries = GFAPI::get_entries($a_val['fields'][0]->formId,$search_arg,$sorting); $count = 1; if(count($a_val['gfpdf_form_settings']) > 0){ $gravity_pdf_form_id = current(array_keys($a_val['gfpdf_form_settings'])); if($entries){ foreach($entries as $key => $val){ echo do_shortcode('[gravitypdf name="Forms" type="download" id="'.$gravity_pdf_form_id.'" text="'.$a_val['title'].' #'.$count.'" entry="'.$val['id'].'"]'); echo '<br/><br/>'; $count++; } } } } } return ob_get_clean(); } 就像R中不是对象的其他所有东西一样,是一个函数。创建{时,您将空环境指定为其父级。名称提示的空白环境不包含任何对象,即它是空的。

当您将envizito的环境更改为FUNn时,您将其父环境设置为空白环境。当您调用envisito(函数定义在全局环境中)时,它会在其环境(即FUNn)中搜索函数envisito(它在{中找到的第一个函数)。它在FUNn中找不到{,因此它看起来就像一个环境。但是,该环境是envisito,它是空的。因此,它失败并显示无法找到函数empty environment的错误。