根据在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