Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.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 函数无法找到在该函数的本地环境中定义的公式对象_R_Boolean Logic_Boolean Algebra - Fatal编程技术网

R 函数无法找到在该函数的本地环境中定义的公式对象

R 函数无法找到在该函数的本地环境中定义的公式对象,r,boolean-logic,boolean-algebra,R,Boolean Logic,Boolean Algebra,我正在尝试构建一个函数,它可以接受公式列表作为参数 我首先定义将作为参数输入函数的变量。前两个变量是包含布尔信息的命名向量 带参数列表的命名变量向量解决方案 我通过使用参数列表而不是依赖正确的环境来明确数据,从而解决了这个问题 Boolean_state_space <- function(variables, parameters, logic) { variable_names <- names(variables) parameter_names <-

我正在尝试构建一个函数,它可以接受公式列表作为参数

我首先定义将作为参数输入函数的变量。前两个变量是包含布尔信息的命名向量

带参数列表的命名变量向量解决方案
我通过使用参数列表而不是依赖正确的环境来明确数据,从而解决了这个问题

Boolean_state_space <- function(variables, parameters, logic) {

    variable_names <- names(variables)
    parameter_names <- names(parameters)

####generate local variables

                                        #assign variable values to variable names
    for (i in 1:length(variables)) {
        assign(variable_names[i], variables[i])

    }
    print(variable_names)
                                        #assign parameter values to parameter names
    for (j in 1:length(parameters)) {
        assign(parameter_names[j], parameters[j])
    }


                             #initialize matrix
    state_space_matrix <- matrix(nrow = 4, ncol = length(c(variable_names, parameter_names)))
    colnames(state_space_matrix) <- c(variable_names, parameter_names)
    rownames(state_space_matrix) <- c(1:nrow(state_space_matrix))
    row.names(state_space_matrix)[1] <- c("t")


    state_space_matrix[1,] <- c(variables, parameters)
    state_space_matrix[,c(ncol(state_space_matrix) - 1, ncol(state_space_matrix) )] <-parameters
    print(state_space_matrix) #test to see if matrix was initialized succesfully
    print(c(M, E, L, G_e, L_e)) #test to see if local variables were successfully defined within the function

## CREATE PARAMETER LIST

    param_list <- split(unname(parameters), names(parameters))
    param_list <- c(split(unname(variables), names(variables)), param_list)
    cols <- names(variables)
    for (k in 2:nrow(state_space_matrix)) {

        for (h in 1:length(variable_names)) {
            state_space_matrix[k, cols[h]] <- lazyeval::f_eval(logic[[h]], param_list)
            print("test")

        }
## UPDATE PARAMETER LIST WITH CURRENT VALUES 
        for (g in 1:length(variable_names)) {
            param_list[variable_names[g]] <- state_space_matrix[k, g]
        }
    }
    print(state_space_matrix)
}

Boolean_state_space(named_variable_vector, named_parameter_vector, logic_list)

Boolean\u state\u space非常感谢Daniel!你能解释一下为什么我的代码一开始不起作用吗?为什么f_eval没有用我的自定义函数的本地环境计算公式?似乎环境if evaluation附加到
logic
中的函数。要么它们最初是在global中创建的,并且一直存在,要么global只是默认值。起初我认为eval函数需要一个env来计算,但在这种情况下,您的解决方案应该可以正常工作,因为默认值是
parent.frame()
。长话短说,功能是在全局中评估的,因此它在功能之外工作,而不是在内部工作。
Boolean_state_space <- function(variables, parameters, logic) {

    variable_names <- names(variables)
    parameter_names <- names(parameters)

####generate local variables

                                        #assign variable values to variable names
    for (i in 1:length(variables)) {
        assign(variable_names[i], variables[i])

    }
                                        #assign parameter values to parameter names
    for (j in 1:length(parameters)) {
        assign(parameter_names[j], parameters[j])
    }

    state_space_matrix <- matrix(nrow = 4, ncol = length(c(variable_names, parameter_names)))
    colnames(state_space_matrix) <- c(variable_names, parameter_names)
    rownames(state_space_matrix) <- c(1:nrow(state_space_matrix))
    row.names(state_space_matrix)[1] <- c("t")


    state_space_matrix[1,] <- c(variables, parameters)
    state_space_matrix[,c(ncol(state_space_matrix) - 1, ncol(state_space_matrix) )] <-parameters
    print(state_space_matrix) #test to see if matrix was initialized succesfully
    print(c(M, E, L, G_e, L_e)) #test to see if local variables were successfully defined within the function
    print(parent.frame())
# Get correct environment
    env <- pryr::where(variable_names[1])
    for (k in 2:nrow(state_space_matrix)) {

        for (h in 1:length(variable_names)) {
# Set environment to evaluate functions in 
            rlang::f_env(logic[[h]]) <- env
            state_space_matrix[k, variable_names[h]] <- lazyeval::f_eval(logic[[h]])
            print("test")

        }

        for (g in 1:length(variable_names)) {
            assign(variable_names[g], state_space_matrix[k, g])
        } 
    }
    print(state_space_matrix)  
}

Boolean_state_space(named_variable_vector, named_parameter_vector, logic_list)