由於@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
好像是兩個問題:得到你需要或者expand.grid()(將導致一個緩慢的溶液)或外所有組合()如果你可以矢量化。然後另外一點是構造名稱:類似outer(x,y,function(foo,bar)paste(「output」,foo,bar,sep =「_」)),您可以將其作爲名稱分配給輸出df)< - xyz在返回之前 – mweylandt 2012-04-20 10:55:46
我只對構建名稱部分感興趣:) – 2012-04-20 11:09:33
一個問題是y = c(a,b,c)會丟失名稱。函數如何計算y的哪些位是a,b和c?你可能會更好地做foo = function(yvalues,...)並從...列表中獲取其他變量。雖然我不確定你可以從...中得到這些名字,沒有一些真正的詭計。你的問題也是'a'不在功能環境中。我認爲你可能在這裏以完全錯誤的方式來解決問題...... – Spacedman 2012-04-20 11:17:53