2014-03-26 35 views
0

我努力使我的工作apply():我有兩個dataframe S:不知道如何申請獲得其參數的優選

from <- c(1,2,3) 
to <- c(2,3,4) 
df1 <- data.frame(from, to) 

long <-c(9,9.2,9.4,9.6) 
lat <- c(45,45.2,45.4,45.6) 
id <- c(1,2,3,4) 
df2 <- data.frame(long, lat, id) 

現在,我想是這樣的:

myFunction <- function(arg){ 
    >>> How do I access arg$from and arg$to? <<<< 
} 
apply(df1,1,myFunction) 

myFunction我需要做一些計算併爲每個from-to對返回一個值。我不明白如何訪問arg的部分內容,因爲arg[0]給我numeric(0)arg$from只是崩潰。

+4

我不完全清楚你想要做什麼。但是如果你不知道R中的向量是1索引的,而不是0索引的,你應該在繼續下一步之前閱讀一些基本的教程。 – joran

回答

1

問題是apply(...)需要矩陣或數組作爲第一個參數。如果你傳遞一個數據幀,它將把它強制轉換爲一個矩陣。矩陣有1個索引,所以左上角的元素是[1,1],而不是[0,0]。此外,使用$表示法不能引用矩陣列。

所以,

f <- function(x) { 
    from <- x[1] 
    to <- x[2] 
    # do stuff with from and to... 
} 

apply(df,1,f) 

會工作。

另一個需要注意的是,如果你的數據幀有(其他)列有字符串,轉換將使所有字符(包括數字!)。這是因爲,根據定義,矩陣的所有元素必須具有相同的數據類型。雖然你的例子沒有這個問題。

1

嘗試mapply()。這是一個多變量版本sapply()。例如:

> myFunction <- function(arg1, arg2){ 
+  return(sum(arg1, arg2)) 
+ } 
> 
> mapply(myFunction, df1$from, df1$to) 
[1] 3 5 7 

您也可以用它在您的數據框中創建一個新變量。

> df1$newvar <- mapply(myFunction, df1$from, df1$to) 
> df1 
    from to newvar 
1 1 2  3 
2 2 3  5 
3 3 4  7 
相關問題