我正在尝试使用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
中提到的名称。
我需要知道的事情:
如何将每个字符串从向量fileNames
传递给函数writeToHDFS
,因为我希望为向量中的每个元素执行此函数。
如何使用字符串名称来访问函数中该名称的变量。 例如:
在这一行,我必须访问名称与在函数中传递给fileName
变量的字符串相同的变量。
hdfs.write(variableWithData, modelfile)
3。我可以将变量fileName
传递给
modelfile <- hdfs.file(fileName, "w")
而不是传递文件名的字符串?
答案 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)