梦孟小宝 发表于 2017-2-15 09:19 
你好,我试着运行了以下这个代码,但是发现rm(a,b)后,就无法运行了,提示:Error in eval(expr, envir, ...
I have seen your other post. Indeed my previous script was not correct. Try the following:
- recommend2 <- function(data, v1, v2) {
-
- var1 <- eval( eval( substitute( quote(v1) ) ), envir = data )
-
- var2 <- eval( eval( substitute( quote(v2) ) ), envir = data )
-
- #若药物1的治疗有效率大于0.9,则推荐药物1
- if (var2[var1==1]>0.9) {
- r <- 1
- } else if (
- #若药物1与药物2、药物3的治疗有效率差异不大(<20%),则推荐药物1
- max(abs(var2[var1==1]-var2[var1==2]/
- max(var2[var1==1],var2[var1==2])),
- abs(var2[var1==1]-var2[var1==2]/
- max(var2[var1==1],var2[var1==2]))) <0.2) {
- r <- 1
- } else if (
- #若药物1与药物2或药物3的治疗有效率差异大(>20%),则推荐治疗有效率高的药物
- any(c(abs(var2[var1==1]-var2[var1==2]/
- max(var2[var1==1],var2[var1==2])),
- abs(var2[var1==1]-var2[var1==2]/
- max(var2[var1==1],var2[var1==2]))) >0.2)) {
- r <- var1[which.max(var2)]
- }
- return(r)
- }
- a <- c(1,2,3)
- b <- c(0.6, 0.98, 0.95)
- df <- data.frame(a,b)
- rm(a, b)
- recommend2(df, a, b)
- ## [1] 2
复制代码I am not sure if those complicate (i.e., hard to understand) eval/substitute/quote is absolute necessary here. I personally would design the function "recommend2" such that the 2nd and 3rd argument are simply strings which would make the scripts much more straight forward:
- recommend3 <-
- function(data, s1, s2)
- {
- var1 <- data[, s1]
- var2 <- data[, s2]
- # ...
- }
复制代码