Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.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函数中使用'subset()'_R_List_Function_Dataframe_Subset - Fatal编程技术网

在次R函数中使用'subset()'

在次R函数中使用'subset()',r,list,function,dataframe,subset,R,List,Function,Dataframe,Subset,当请求时,函数foo1可以子集列表by所需变量(例如by=ESL==1)。否则,foo1将只输出输入的列表本身 出于我的目的,我需要在名为foo2的新函数中使用foo1但是我想知道为什么foo2失败,以及如何修复它: eval(e,x,parent.frame())中出错:未找到对象“ESL” 完整的可复制数据和代码如下: foo1 <- function(by, data){ L <- split(data, data$study.name) ; L[[1]] <- NUL

当请求时,函数
foo1
可以
子集
列表
by
所需变量(例如
by=ESL==1
)。否则,
foo1
将只输出输入的列表本身

出于我的目的,我需要在名为
foo2
的新函数中使用
foo1
但是我想知道为什么
foo2
失败,以及如何修复它:

eval(e,x,parent.frame())中出错:未找到对象“ESL”

完整的可复制数据和代码如下:

foo1 <- function(by, data){

L <- split(data, data$study.name) ; L[[1]] <- NULL

 if(!missing(by)){

 s <- substitute(by)    

 H <- lapply(L, function(x) do.call("subset", list(x, s)))

 L <- Filter(nrow, H)
   }
return(L)
}

## EXAMPLE OF USE:
D <- read.csv("https://raw.githubusercontent.com/izeh/i/master/k.csv", h = T) ## Data

foo1(data = D, by = ESL == 1) ## works fine :-) @@@@

## BUT:
foo2 <- function(by, data){

  foo1(by = by, data = data)
}

## EXAMPLE OF USE:
foo2(data = D, by = ESL == 1) ## Fails :-( @@@@

foo1在这里,我们可以将
foo2
修改为
eval
luate函数调用

foo2 <- function(by, data){ 

  eval(substitute(foo1(by = by, data = data)))
 }

out1 <- foo1(data = D, by = ESL == 1) 
out2 <- foo2(data = D, by = ESL == 1) 
identical(out1, out2)
#[1] TRUE

foo2它是如何失败的?它将是envissue@akrun,我明白了,但是还有什么选择呢?在
foo2
中,尝试
eval(替换(傻瓜1,by=by,data=data))