相关疑难解决方法(0)

在函数内部使用ddply找不到对象错误

这确实挑战了我调试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)

scope r function plyr

40
推荐指数
4
解决办法
1万
查看次数

帮助理解我在R中定义的函数中的错误

我是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)

这给出了同样的错误.我哪里错了?

谢谢你的帮助.

r

5
推荐指数
2
解决办法
1200
查看次数

标签 统计

r ×2

function ×1

plyr ×1

scope ×1