2014-02-13 42 views
0

我正在练习在R中使用apply函数,所以我正在编写一个简单的函数来应用于数据框。R:正确使用数据框作为函数的参数

我有一个2列的数据帧。

V1 V2 
1  3 
2  4 

我决定做一些基本的算术并在第3列的答案,特别是,我想3乘以2的第一列和第二列,然后总结他们。

V1 V2 V3 
1  3  11 
2  4  16 

这是我的想法是:

mydf <- as.data.frame(matrix(c(1:4),ncol=2,nrow=2)) 
some_function <- function(some_df) {some_df[,1]*2 + 
            some_df[,2]*3} 
mydf <- apply(mydf ,2, some_function) 

但是,什么是错我的函数的自变量? R给我一个关于数据帧维度的错误。为什么?

+0

你选择乘法作为例子还是它是你的实际任务? –

+0

这只是一个例子 –

回答

1

三件事情错:

1)申请“循环”不是每列或行的矢量,所以你只要解决了名字[1]不是[,1]
2)你需要运行行间距= 1,而不是2
3)你需要cbind结果,因为申请不追加,所以你覆盖矢量

mydf <- as.data.frame(matrix(c(1:4),ncol=2,nrow=2)) 

some_function <- function(some_df) {some_df[1]*2 + 
             some_df[2]*3} 

mydf <- cbind(mydf,V3=apply(mydf ,1, some_function)) 

# V1 V2 V3 
#1 1 3 11 
#2 2 4 16 

,但可能会更容易些向量运算:

mydf$V3<-mydf[,1]*2 + mydf[,2]*3 

因为向量数学是关于R的最伟大的事情之一

+0

谢谢!这非常有帮助。 –