2

我试图通过使用记录在案的应用函数来避免循环,但无法找到任何适合我目的的示例。我有两个向量,x是 (1 xp) 和y是 (1 xq) 并且想将它们的参数的笛卡尔积输入到一个函数中,这是一个简约的例子:

    require(kernlab)
    x = c("cranapple", "pear", "orange-aid", "mango", "kiwi", 
           "strawberry-kiwi", "fruit-punch", "pomegranate")
    y = c("apple", "cranberry", "orange", "peach")

    sk <- stringdot(type="boundrange", length = l, normalized=TRUE)
    sk_map = function(x, y){return(sk(x, y))}

我意识到我可以在一个维度上使用应用函数并在另一个维度上使用循环,但我觉得必须有一种方法可以一步完成......有什么想法吗?

4

2 回答 2

1

outer如果您的函数是矢量化的,您可以为此使用该函数,如果不是,您可以使用该Vectorize函数创建一个矢量化函数。

outer(x,y,FUN=sk)

或者

outer(x,y, FUN=Vectorize(sk))
于 2014-05-19T23:40:11.900 回答
1

这就是你的想法:

sk <- stringdot(type="boundrange", length = 2, normalized=TRUE)

# Create data frame with every combination of x and y
dat = expand.grid(x=x,y=y)

# Apply sk by row
sk_map = apply(dat, 1, function(dat_row) sk(dat_row[1],dat_row[2]))
于 2014-05-19T22:51:26.267 回答