Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.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/7/jsf/5.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_List_Function - Fatal编程技术网

我在R中创建了一个函数列表。列表中的函数与独立编写的函数的行为方式不同

我在R中创建了一个函数列表。列表中的函数与独立编写的函数的行为方式不同,r,list,function,R,List,Function,下面的数据是一个更大数据集的简化版本 我有以下三个数据帧的列表,名为df.list: > part.1<-data.frame(c(1,2,3,4), c(5,6,7,8),c(9,10,11,12)) >part.2<-data.frame(c(1,2,3,1),c(5,4,7,1),c(9,4,10,1)) > part.3<-data.frame(c(2,2,3,3),c(2,2,7,7),c(2,2,10,10)) > colnames(part

下面的数据是一个更大数据集的简化版本

我有以下三个数据帧的列表,名为df.list:

> part.1<-data.frame(c(1,2,3,4), c(5,6,7,8),c(9,10,11,12))
>part.2<-data.frame(c(1,2,3,1),c(5,4,7,1),c(9,4,10,1))
> part.3<-data.frame(c(2,2,3,3),c(2,2,7,7),c(2,2,10,10))
> colnames(part.1)<-c("a","b","c")
> colnames(part.2)<-c("a","b","c")
> colnames(part.3)<-c("a","b","c")
> df.list<-list(part.1,part.2,part.3)
当我将function.list[[1]]作为一个独立函数写入df.list中的第一个数据帧(名为function.1)时,它会给出所需的输出

> function.1<-function(x,y,z)
+ {
+ {for (i in 1:4)
+ {
+ if(x==as.numeric(df.list[[1]]$a[i]) & y==as.numeric(df.list[[1]]$b[i]) & z==as.numeric(df.list[[1]]$c[i]))
+ {a<-"yes"}
+ else{a<-"no"}
+ return(a)
+ }
+ }
+ }

> mapply(function.1, df.primary$e, df.primary$f,df.primary$g)
[1] "yes" "yes" "no"  "no" 
是否有人解释了为什么function.list[[1]]和function.1给出了不同的输出,和/或关于如何生成function.list[[1]]给出了正确的输出;也就是说,输出与函数1相同? 也欢迎使用更好的代码来实现所需的输出。

我认为这可以做到:

check_rows <- function(df.ref, dfs.check){
    ref_rows <- apply(X=df.ref, MARGIN=1,
                      FUN=function(row) paste(row, collapse='-'))
    lapply(X=dfs.check, FUN=function(df.check){
        df_rows <- apply(X=df.check, MARGIN=1,
                         FUN=function(row) paste(row, collapse='-'))
        ifelse(df_rows %in% ref_rows, 'yes', 'no')
    })
}

check_rows(df.ref=df.primary, dfs.check=df.list)

check_rows(df.ref=df.primary, dfs.check=df.list[1])

仔细看看mapply如何循环以及它返回什么。
> function.1<-function(x,y,z)
+ {
+ {for (i in 1:4)
+ {
+ if(x==as.numeric(df.list[[1]]$a[i]) & y==as.numeric(df.list[[1]]$b[i]) & z==as.numeric(df.list[[1]]$c[i]))
+ {a<-"yes"}
+ else{a<-"no"}
+ return(a)
+ }
+ }
+ }

> mapply(function.1, df.primary$e, df.primary$f,df.primary$g)
[1] "yes" "yes" "no"  "no" 
> mapply(function.list[[1]], df.primary$e, df.primary$f,df.primary$g)
[1] "no" "no" "no" "no"
check_rows <- function(df.ref, dfs.check){
    ref_rows <- apply(X=df.ref, MARGIN=1,
                      FUN=function(row) paste(row, collapse='-'))
    lapply(X=dfs.check, FUN=function(df.check){
        df_rows <- apply(X=df.check, MARGIN=1,
                         FUN=function(row) paste(row, collapse='-'))
        ifelse(df_rows %in% ref_rows, 'yes', 'no')
    })
}

check_rows(df.ref=df.primary, dfs.check=df.list)

check_rows(df.ref=df.primary, dfs.check=df.list[1])