2012-04-20 61 views
0

也許是一個愚蠢的問題,但我無法找到任何答案(我看過:P)。我試圖創建一個帶有兩個參數的函數,它們是向量(例如,x = c(a,b,c)和y = c(50,75,100))。我將編寫一個計算所有這些組合的函數,並將參數用作輸出名稱的一部分。例如。作爲輸出名稱的一部分的函數參數

函數(X,Y)
DF $ output_a_50 = A * 2 + 50^2
DF $ output_a_75 = A * 2 + 75^2 .....

任何建議將是讚賞:)

+2

好像是兩個問題:得到你需要或者expand.grid()(將導致一個緩慢的溶液)或外所有組合()如果你可以矢量化。然後另外一點是構造名稱:類似outer(x,y,function(foo,bar)paste(「output」,foo,bar,sep =「_」)),您可以將其作爲名稱分配給輸出df)< - xyz在返回之前 – mweylandt 2012-04-20 10:55:46

+0

我只對構建名稱部分感興趣:) – 2012-04-20 11:09:33

+0

一個問題是y = c(a,b,c)會丟失名稱。函數如何計算y的哪些位是a,b和c?你可能會更好地做foo = function(yvalues,...)並從...列表中獲取其他變量。雖然我不確定你可以從...中得到這些名字,沒有一些真正的詭計。你的問題也是'a'不在功能環境中。我認爲你可能在這裏以完全錯誤的方式來解決問題...... – Spacedman 2012-04-20 11:17:53

回答

2

由於@Spacedman和其他人討論,你的問題是,如果你通過c(a, b, c)到你的函數,名稱將會丟失。在我看來,最好的選擇是通過一個列表:

foo <- function(x, y) { 
    df <- list() 
    for (xx in names(x)) { 
     for (yy in y) { 
     varname <- paste("output", xx, yy, sep = "_") 
     df[[varname]] <- x[[xx]]*2 + yy^2 
     } 
    } 
    df 
} 

foo(x = list(a = NA, b = 1, c = 2:3), 
    y = c(50, 75, 100)) 

# $output_a_50 
# [1] NA 
# 
# $output_a_75 
# [1] NA 
# 
# $output_a_100 
# [1] NA 
# 
# $output_b_50 
# [1] 2502 
# 
# $output_b_75 
# [1] 5627 
# 
# $output_b_100 
# [1] 10002 
# 
# $output_c_50 
# [1] 2504 2506 
# 
# $output_c_75 
# [1] 5629 5631 
# 
# $output_c_100 
# [1] 10004 10006 
相關問題