假设我使用R中的sprintf命令编写了以下对象,方程式<input name="somename" id="someid" type="hidden" value="<?php $var ?>">
,该命令基于输入向量eqn.r
进行评估:
pizza
当我在R控制台中输入eqn.r<- sprintf("sum((%s - mean(%s,na.rm=T))^2,na.rm=T)",pizza,pizza)
pizza<-c(1:10)
时,我得到了这个:
eqn.r
我希望它实际评估,并打印出来:
"sum((pizza - mean(pizza,na.rm=T))^2,na.rm=T)"
答案 0 :(得分:5)
给定存储为字符串的变量名称,您可以使用标准索引从传递的数据帧中获取变量的数据。通常,这比使用sprintf
或paste
生成代码然后解析和评估该代码更受欢迎。
f <- function(dat, vname) sum((dat[,vname] - mean(dat[,vname], na.rm=T))^2, na.rm=T)
f(iris, "Sepal.Length")
# [1] 102.1683
如果你想在变量名称周围没有引号的情况下调用你的函数,你可以这样做:
f2 <- function(dat, vname) {
m <- match.call()
x <- with(eval(m[["dat"]]), eval(m[["vname"]]))
sum((x - mean(x,na.rm=T))^2,na.rm=T)
}
f2(iris, Sepal.Length)
# [1] 102.1683