我试图通过使用文档化的apply函数来避免循环,但是无法找到任何符合我目的的示例。我有两个向量, 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))}
我意识到我可以在一个维度上使用apply函数并为另一个维度循环,但我觉得必须有一种方法可以一步到位......任何想法?
答案 0 :(得分: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]))
答案 1 :(得分:1)
如果函数是矢量化的,可以使用outer
函数,如果不是,可以使用Vectorize
函数创建矢量化函数。
outer(x,y,FUN=sk)
或
outer(x,y, FUN=Vectorize(sk))