脚本返回NULL值

时间:2012-09-18 03:45:57

标签: r

我有这个脚本:

dat <- read.csv(file="Task_vs_Files_Whirr2.csv", header=T, sep=",",
                row.names=1) 
(sapply(1:nrow(dat), function(x) {
    if (dat[x,2]==1) { 
         write.csv(dat[ (dat[[2]]==1 ) & (1:nrow(dat) >= x) , ] , 
                   file = paste("fil_", x, ".csv") )
    } else {
         NULL
 }))

但脚本返回NULL值,如下所示:

[[1]]
NULL

[[2]]
NULL

[[3]]
NULL

[[4]]
NULL

[[5]]
NULL

[[6]]
NULL

[[7]]
NULL

以下是其他细节:

> str(dat) 
'data.frame':   7 obs. of  7 variables:
 $ pom.xml.         : int  1 1 0 0 0 1 1
 $ ZooKeeper.java   : int  0 0 0 0 0 1 0
 $ HBase.java       : int  1 1 1 0 1 1 0
 $ Hadoop.java.     : int  0 0 0 0 0 0 1
 $ BasicServer.java.: int  1 0 0 0 0 0 0
 $ Abstract.java.   : int  1 1 0 1 0 1 1
 $ HBaseRegion.java : int  1 0 0 0 0 1 1

> dput(dat)
structure(list(pom.xml. = c(1L, 1L, 0L, 0L, 0L, 1L, 1L), ZooKeeper.java = c(0L, 
0L, 0L, 0L, 0L, 1L, 0L), HBase.java = c(1L, 1L, 1L, 0L, 1L, 1L, 
0L), Hadoop.java. = c(0L, 0L, 0L, 0L, 0L, 0L, 1L), BasicServer.java. = c(1L, 
0L, 0L, 0L, 0L, 0L, 0L), Abstract.java. = c(1L, 1L, 0L, 1L, 0L, 
1L, 1L), HBaseRegion.java = c(1L, 0L, 0L, 0L, 0L, 1L, 1L)), .Names = c("pom.xml.", 
"ZooKeeper.java", "HBase.java", "Hadoop.java.", "BasicServer.java.", 
"Abstract.java.", "HBaseRegion.java"), class = "data.frame", row.names = c("WHIRR-25", 
"WHIRR-28", "WHIRR-55", "WHIRR-61", "WHIRR-76", "WHIRR-87", "WHIRR-92"
))

> sessionInfo()
R version 2.13.1 (2011-07-08)
Platform: i386-pc-mingw32/i386 (32-bit)

locale:
[1] LC_COLLATE=English_Australia.1252  LC_CTYPE=English_Australia.1252    LC_MONETARY=English_Australia.1252 LC_NUMERIC=C                      
[5] LC_TIME=English_Australia.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

1 个答案:

答案 0 :(得分:0)

试图挽救一些东西......(请参阅上面关于为什么返回NULL的评论)

如果您只对dat[,2]==1的数据感兴趣,也可以使用which查找rows

interested <- which(dat[,2]==1)

现在,你真的想要包含相同数据的单独文件,每次都没有标题行重复吗?这就是你的代码现在正在做的事情。

编写for循环因为更简单来理解

row_index <- seq.int(nrow(dat))
for(.row in interested){

  write.csv(dat[(dat[[2]] == 1) & (row_index >=.row),], 
            file = sprintf('fil_%s.csv',.row))
}

使用您当前的数据,这将创建一个文件fil_6.csv,其中包含数据框的第6行(x[,2]==1

这个脚本是否会扩展到更大的数据集尚不清楚,因为目前还不清楚你想做什么。