如何在R中使用lapply

时间:2016-06-02 10:54:21

标签: r

我正在尝试使用lapply,以便我可以在R中的矢量的所有元素上应用自定义函数。我试图避免在这里使用for循环。

这是我到目前为止所做的:

writeToHDFS <- function(fileName){
  print(fileName)
  hdfs.init()
 modelfile <- hdfs.file(fileName, "w")
  hdfs.write(gaDataUser, modelfile)
 hdfs.close(modelfile)
}

fileNames <- c("gaDataUser", "gaDataSession", "gaDataSources","gaDataEventTracking", "gaDataEcommerce", "gaDataEcommerce2", "gaDataEcommerce3", "gaDataEcommerce4")


lapply(fileNames,writeToHDFS(x))

我的变量具有字符向量fileNames中提到的名称。

我需要知道的事情:

  1. 如何将每个字符串从向量fileNames传递给函数writeToHDFS,因为我希望为向量中的每个元素执行此函数。

  2. 如何使用字符串名称来访问函数中该名称的变量。 例如:

  3. 在这一行,我必须访问名称与在函数中传递给fileName变量的字符串相同的变量。

    hdfs.write(variableWithData, modelfile)
    

    3。我可以将变量fileName传递给

    modelfile <- hdfs.file(fileName, "w")
    

    而不是传递文件名的字符串?

2 个答案:

答案 0 :(得分:2)

  

我正在尝试使用lapply,以便我可以在R的矢量的所有元素上应用自定义函数

在这种情况下,您应该使用tapply

tapply(fileNames, 1:length(fileNames), writeToHDFS)

lapply是“list-apply”的缩写,但fileNames是一个不是列表的向量。

人们拒绝投票给你,因为强烈建议您先查看手册或文档。由于您已经非常善于使用lapply,因此您可以向?lapply学习。

向下投票,是另一种形式的反馈,而不是评论和答案。这意味着这个问题并不需要SO社区的努力。作为R用户,你应该知道R文档是你遇到麻烦时应该首先考虑的事情。

答案 1 :(得分:1)

writeToHDFS(x)为您提供函数的返回值。 但是你想传递函数:

lapply(fileNames,writeToHDFS)