Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.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_Function_Loops - Fatal编程技术网

创建循环函数,用于从R中的另一列计算一列的值

创建循环函数,用于从R中的另一列计算一列的值,r,function,loops,R,Function,Loops,对于数据帧AB上的: AB<-data.frame(ID=c(1,2,4),A=c(2,8,8),B=c(6,2,2),dE=c(0,0,0)) 将上述内容转换为: ID A B dE 1 2 6 3 2 8 2 0.25 4 8 2 4 因为我有几个文件包含A和B的不同列名,所以编写一个函数更实用,比如 dEs <- function(data,nume,denom){ #define which datafile and numerat

对于数据帧AB上的:

AB<-data.frame(ID=c(1,2,4),A=c(2,8,8),B=c(6,2,2),dE=c(0,0,0))
将上述内容转换为:

ID A  B  dE
1  2  6  3
2  8  2  0.25
4  8  2  4
因为我有几个文件包含A和B的不同列名,所以编写一个函数更实用,比如

dEs <- function(data,nume,denom){ 
        #define which datafile and numerator/denom column
        #so in case of AB this becomes AB$dE; 
        # i dont know the correct way to do this.
        dE=data.'$dE'
        start=data.'$'.nume #to become AB$A
        end=data.'$'.denom #to become AB$B
        for(i in data){
          dE[i] <- (start[i]/end[i])
        }
}

dEs您不需要循环,因为R是矢量化的:

> AB <- data.frame(ID=c(1,2,4),A=c(2,8,8),B=c(6,2,2),dE=c(0,0,0))
> AB <- transform(AB, dE=B/A)
> AB
  ID A B   dE
1  1 2 6 3.00
2  2 8 2 0.25
3  4 8 2 0.25

在这里编写函数是毫无意义的,因为您不需要任何循环——只需编写
AB$dE=AB$B/AB$a
(或者更好的
AB$dE
> AB <- data.frame(ID=c(1,2,4),A=c(2,8,8),B=c(6,2,2),dE=c(0,0,0))
> AB <- transform(AB, dE=B/A)
> AB
  ID A B   dE
1  1 2 6 3.00
2  2 8 2 0.25
3  4 8 2 0.25
dEs <- function(data,nume,denom){ 
  data$dE <- data[[nume]] / data[[denom]]
}