这确实挑战了我调试R代码的能力.
我想ddply()用于将相同的函数应用于按顺序命名的不同列; 例如.a,b,c.为此,我打算重复将列名称作为字符串传递,并使用eval(parse(text=ColName))该函数来引用它.我从另一个答案中抓住了这个技术.
这很有效,直到我放入ddply()另一个功能.以下是示例代码:
# Required packages:
library(plyr)
myFunction <- function(x, y){
NewColName = "a"
z = ddply(x, y, summarize,
Ave = mean(eval(parse(text=NewColName)), na.rm=TRUE)
)
return(z)
}
a = c(1,2,3,4)
b = c(0,0,1,1)
c = c(5,6,7,8)
df = data.frame(a,b,c)
sv = c("b")
#This works.
ColName = "a"
ddply(df, sv, summarize,
Ave = mean(eval(parse(text=ColName)), na.rm=TRUE)
)
#This doesn't work
#Produces error: "Error in parse(text = NewColName) : object 'NewColName' not found"
myFunction(df,sv)
#Output in both …Run Code Online (Sandbox Code Playgroud) 我是R的新手,刚学会编写简单的函数.有人可以帮助我理解为什么以下功能不起作用.
fboxplot <- function(mydataframe, varx, vary)
{
p <- ggplot(data=mydataframe, aes(x=varx, y=vary))
p + geom_boxplot()
}
col1 = factor(rep(1:3, 3))
col2 = rnorm(9)
col3 = c(rep(10,5), rep(20,4))
df = data.frame(col1 = col1, col2 = col2, col3 = col3)
Run Code Online (Sandbox Code Playgroud)
现在,如果我调用fboxplot函数
fboxplot(df, col1, col2)
Run Code Online (Sandbox Code Playgroud)
我收到了错误Error in eval(expr, envir, enclos): object varx not found.我也试过了
fboxplot(df, varx = col1, vary = col2)
Run Code Online (Sandbox Code Playgroud)
这给出了同样的错误.我哪里错了?
谢谢你的帮助.