Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.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中打开的csv文件中的名称数据生成函数_R_Function - Fatal编程技术网

根据在R中打开的csv文件中的名称数据生成函数

根据在R中打开的csv文件中的名称数据生成函数,r,function,R,Function,我有一个变量名和权重的数据框架 例如: Names <- c("a","b","c") Weightings <- c(1,2,3) df <- cbind(Names,Weightings) 我需要根据这些数据生成一个函数 myfun <- function(x,data){ data[x,"a"]*1+data[x,"b"]*2+data[x,"c"]*3} 我有另一个名为data的数据框架,其中列名与a、b和c匹配,我将在所有行上对该数据应用myfun 我遇到的

我有一个变量名和权重的数据框架

例如:

Names <- c("a","b","c")
Weightings <- c(1,2,3)
df <- cbind(Names,Weightings)
我需要根据这些数据生成一个函数

myfun <- function(x,data){
data[x,"a"]*1+data[x,"b"]*2+data[x,"c"]*3}
我有另一个名为data的数据框架,其中列名与a、b和c匹配,我将在所有行上对该数据应用myfun

我遇到的问题是,名称和权重向量的大小可能会有所不同。我可以使用5个名称和权重,但我希望它能够生成新函数myfun

Newnames <- c("a","b","c","d","e")
NewWeightings <- c(1,2,3,4,5)

myfun <- function(data){
data[x,"a"]*1+data[x,"b"]*2+data[x,"c"]*3+data[x,"d"]*4+data[x,"e"]*5}

有没有一种简单的方法可以自动创建此函数,这样我就可以给某人代码,以及列名和权重的.csv文件,他们就可以生成新函数。

这样的策略怎么样。我们用一个函数来构造一个函数

getMyFunction <- function(columns, weights)  {
    stopifnot(length(columns)==length(weights))
    function(x, data) {
        rowSums(data[x, columns] * weights)
    }
}
我们可以将其与

dd<-data.frame(a=c(1,1), b=c(1,2), c=c(1,3))

myFun(1,dd)
# [1] 6
myFun(2,dd)
# [1] 13
myFun(1:2,dd)
# [1] 6 13

非常感谢。效果很好。我必须研究rowSums函数的代码。
dd<-data.frame(a=c(1,1), b=c(1,2), c=c(1,3))

myFun(1,dd)
# [1] 6
myFun(2,dd)
# [1] 13
myFun(1:2,dd)
# [1] 6 13