2011-07-05 60 views
2

我在R中定义函数时遇到了问题。我试图将for循环的内容转换为函数,以便我可以将lapply函数的列表,(以及在使用所述包multicoremclapplyR:在用户定义的函数中构建数据框

我需要通过行建立一个数据帧的行,同时一个文本和一个数值在从函数的时间。我从以前的帖子了解到,我必须以某种方式返回值,因为R的传递和复制而不是传递参考方案(请参阅:How to add a column in the data frame within a function

下面是我正在做的简化版本:

letters <- c('aa', 'bb', 'cc', 'aa', 'bb', 'dd', 'cc', 'dd', 'ee', 'ee') 
numbers <- 1:10 
madeup <- data.frame(letters, numbers) 
output <- data.frame() 

functest <- function(x) { 
    subtest <- subset(madeup, letters==x) 
    if (nrow(subtest==2)){ 
     calc <- subtest$numbers[2] - subtest$numbers[1] 
     ...WHAT GOES HERE?... 
    } 
} 

任何人都知道我应该做些什么来回报xcalc让我可以再rbind这两个各值代入output数据帧的新行?

如果我可以复制在这两个值函数,我在想象执行命令会看起来像---

output <- rbind(output, [mc]lapply(letters, functest)) 

---但很高兴能纠正这个!

+0

如果(nrow(分测验== 2))可能不是你的意思,但它不是真的无论如何,清除你的问题,以便清楚你想要的功能是什么,看起来你想通过传入x来发生某些事情,“subtest”是来自“madeup”的两行,但是。 。 。如何发布你想要转换的for循环,所以我们至少有这样的? – mdsumner

+0

@mdsumner嗨 - 'if(nrow(subtest == 2))'就是我的意思 – cainesap

+0

@mdsumner(oops,没有意识到返回添加评论;道歉..新手..)所以,是的,如果声明就是我的意思,我决定展示for循环的类比,因为我正在使用的是不容易重现的。我需要的是x值有2行,并显示减法计算的结果..这样我就可以把它们放在一个数据框中 – cainesap

回答

2

rbind ing data.frames我的经验很慢,但无论如何:用return(data.frame(x,calc))替换占位符。

改变功能,可能让他们都到一个data.fame最简单的方法之后是通过:

output<-do.call(rbind, lapply(letters, functest)) 
+0

+1但是,你可能想要使用独特的(字母)' – James

+0

辉煌!非常感谢尼克:-) – cainesap

+0

@詹姆斯 - 是的,你是对的,我在我的原始代码中这样做,但忘记了这一步:我应该添加uniqletters < - 独特(字母),然后它会输出< -do.call(rbind,lapply(uniqletters,functest)) – cainesap

相关问题