Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R l_ply对如何将变量传递给函数感到困惑_R_Plyr - Fatal编程技术网

R l_ply对如何将变量传递给函数感到困惑

R l_ply对如何将变量传递给函数感到困惑,r,plyr,R,Plyr,我相信这一定在什么地方得到了回答,所以;如果你有一个有帮助的答案,请让我知道;o 我有许多相当大的处理任务,主要是多标签文本分类器,它们读取大量文件,处理这些文件,输出结果,然后继续下一个 我有一个整洁的顺序工作,但想并行的事情 作为一个非常基本的例子 require(plyr) fileDir <- "/Users/barneyc/sourceFiles" outputDir <- "/Users/barneyc/outputFiles" files <- as.list

我相信这一定在什么地方得到了回答,所以;如果你有一个有帮助的答案,请让我知道;o

我有许多相当大的处理任务,主要是多标签文本分类器,它们读取大量文件,处理这些文件,输出结果,然后继续下一个

我有一个整洁的顺序工作,但想并行的事情

作为一个非常基本的例子

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