【问题标题】:R - apply family function that uses same iterator for multiple variableR - 应用对多个变量使用相同迭代器的族函数
【发布时间】:2017-08-09 10:29:42
【问题描述】:
alply(df1 %>% as.matrix, 2, foo, keyword.count)

上面的代码行在“df1”的每一列上应用了函数“foo”。我想向函数 foo 添加一个附加参数(df2),它的列数与 df1 相同。像

alply(df1 %>% as.matrix, 2, foo, df2 %>% as.matrix, keyword.count)

我想要一个对 df1 和 df2 使用相同迭代器的函数。在循环方面,第一次迭代中的 df1[1] 和 df2[1],第二次迭代中的 df1[2] 和 df2[2] 等等。 在当前使用 alply 的实现中,df1[1] 使用 df2 矩阵作为参数,而不是 df2 的列。

就循环而言,它看起来像这样

for(int i=0; i<ncol(df1); i++){
 foo(df1[i], df2[i], keyword.count)
}

是否有一个应用家庭功能允许我这样做?或某种方式来获取可以在“foo”中访问的迭代次数。 任何帮助将不胜感激

示例:

df1 <- data.frame(
       col1 = sample(LETTERS[1:5]),
       col2 = sample(LETTERS[6:10])
   )
df2 <- data.frame(
  col1 = sample(LETTERS[11:13]),
  col2 = sample(LETTERS[14:16])
)


foo <- function(terms, fixed_terms , collocated_words ) {
  terms <- terms[terms != ""]
  fixed_terms <- fixed_terms[fixed_terms != ""]

##use terms and fixed_terms in another function

}

mlply(.data =  as.matrix(df1),  .fun =  foo, fixed_terms = as.matrix(df2), collocated_word=2)

##error:
##Error in (function (terms, fixed_terms, collocated_words)  : 
##  unused arguments (col1 = "B", col2 = "H")

【问题讨论】:

    标签: r loops apply plyr


    【解决方案1】:

    你可以使用mlply:

    mlply(as.matrix(df1), foo, argument2 = as.matrix(df2), 2)
    

    您可能需要指定 foo 每个矩阵被调用的参数

    【讨论】:

    • 不完全。由于 alply 允许我按列处理我的数据框,mapply 将 foo 应用于 df1 的每个元素
    • 看起来 mlplyalply 相比应该做同样的事情,mapplysapply 相比。查看我的编辑
    • 谢谢@tbradley。我在尝试使用 mlply 时遇到错误。它不采用 .margin 参数,所以我试图找出解决方法。 “splitter_a(.data, .margins, .expand) 中的错误:边距无效”。
    • 如果错误仍然存​​在,我将准备一个可重现的示例
    • mlply(.data = as.matrix(df1), .fun = foo, argument2 = as.matrix(df2), argument3=keyword.count)。导致错误“函数中未使用的参数”。未使用的参数来自 df1。由于某种原因 df1 没有映射到 argument1。
    猜你喜欢
    • 2022-10-07
    • 2015-10-26
    • 2020-02-25
    • 1970-01-01
    • 1970-01-01
    • 2018-01-01
    • 1970-01-01
    • 2020-08-18
    • 1970-01-01
    相关资源
    最近更新 更多