R l_ply对如何将变量传递给函数感到困惑
我相信这一定在什么地方得到了回答,所以;如果你有一个有帮助的答案,请让我知道;o 我有许多相当大的处理任务,主要是多标签文本分类器,它们读取大量文件,处理这些文件,输出结果,然后继续下一个 我有一个整洁的顺序工作,但想并行的事情 作为一个非常基本的例子R l_ply对如何将变量传递给函数感到困惑,r,plyr,R,Plyr,我相信这一定在什么地方得到了回答,所以;如果你有一个有帮助的答案,请让我知道;o 我有许多相当大的处理任务,主要是多标签文本分类器,它们读取大量文件,处理这些文件,输出结果,然后继续下一个 我有一个整洁的顺序工作,但想并行的事情 作为一个非常基本的例子 require(plyr) fileDir <- "/Users/barneyc/sourceFiles" outputDir <- "/Users/barneyc/outputFiles" files <- as.list
require(plyr)
fileDir <- "/Users/barneyc/sourceFiles"
outputDir <- "/Users/barneyc/outputFiles"
files <- as.list(list.files(full.names=TRUE,recursive=FALSE,pattern=".csv"))
l_ply(files, function(x){
print(x)
#change to dir containing source files
setwd(fileDir)
# read file
content <- read.csv(file=x,header=TRUE)
# change directory to output
setwd(outputDir)
# append the itemID from CSV file to
write.table(content$itemID,file="ids.csv", append = TRUE, sep=",", row.names=FALSE,col.names=TRUE)
}, .parallel=FALSE )
有人能解释一下我是如何将这两个目录变量传递给这里的函数的吗 多亏了@Roland,我的并行函数现在将是
require(plyr)
require(doParallel)
fileDir <- "/Users/barneyc/sourceFiles"
outputDir <- "/Users/barneyc/outputFiles"
files <- as.list(list.files(full.names=TRUE,recursive=FALSE,pattern=".csv"))
cl<-makeCluster(4) # make a cluster of available cores
registerDoParallel(cl) # raise cluster
l_ply(files, function(x,y,z){
filename <- x
fileDir <- y
outputDir <- z
#change to dir containing source files
setwd(fileDir)
# read file
content <- read.csv(file=filename,header=TRUE)
# change directory to output
setwd(outputDir)
# append the itemID from CSV file to
write.table(content$itemID,file="ids.csv", append = TRUE, sep=",", row.names=FALSE,col.names=TRUE)
}, y=fileDir, z=outputDir, .parallel=TRUE )
stopCluster() # kill the cluster
尝试将它们作为参数传递给函数:l_plyfiles,functionx,y,z{…},y=…,z=…您可以避免复制/重命名参数。只需定义functionfilename、fileDir、outputDir。是的,我自己使用过,但为了清晰起见,留下了一个例子。我现在让我的16核机器一次完成102个分类任务14个,为操作系统节省2个核以防万一。很好的帮助,谢谢。
require(plyr)
require(doParallel)
fileDir <- "/Users/barneyc/sourceFiles"
outputDir <- "/Users/barneyc/outputFiles"
files <- as.list(list.files(full.names=TRUE,recursive=FALSE,pattern=".csv"))
cl<-makeCluster(4) # make a cluster of available cores
registerDoParallel(cl) # raise cluster
l_ply(files, function(x,y,z){
filename <- x
fileDir <- y
outputDir <- z
#change to dir containing source files
setwd(fileDir)
# read file
content <- read.csv(file=filename,header=TRUE)
# change directory to output
setwd(outputDir)
# append the itemID from CSV file to
write.table(content$itemID,file="ids.csv", append = TRUE, sep=",", row.names=FALSE,col.names=TRUE)
}, y=fileDir, z=outputDir, .parallel=TRUE )
stopCluster() # kill the cluster