在R中,如何在sapply中对数据帧进行子集化?

时间:2013-09-18 18:23:51

标签: r dataframe sapply

这里的目标是将几个文件中的前6列连接到R中的数据框。 我很困惑为什么方法(1)工作但方法(2)不起作用。 对我来说,两种方法都应该是等价的。

非常欢迎用于调试的答案或提示。

方法(1)

ret <- sapply(fn, function(x) { (read.table(x, header = FALSE)) })
ret <- lapply(ret, function(x) {x[, 1:6]})

方法(1)正确输出:

> head(ret)
 $`../pool.11421.poolFile`
    V1    V2     V3    V4  V5              V6
 1   1 M5132 ACAGTG 11421 351 1,2,3,4,5,6,7,8
 2   2 M6764 ACTGAT 11421 351 1,2,3,4,5,6,7,8
 3   3 M5597 AGTCAA 11421 351 1,2,3,4,5,6,7,8
 4   4 M5636 AGTTCC 11421 351 1,2,3,4,5,6,7,8
 5   5 M2463 ATCACG 11421 351 1,2,3,4,5,6,7,8
 6   6 M5792 ATGTCA 11421 351 1,2,3,4,5,6,7,8
 7   7 M6799 ATTCCT 11421 351 1,2,3,4,5,6,7,8

方法(2)

ret <- sapply(fn, function(x) { (read.table(x, header = FALSE))[, 1:6]})

方法(2)错误输出:

> head(ret)
        ../pool.11421.poolFile ../pool.11422.poolFile ../pool.11423.poolFile
 V1 Integer,23             Integer,48             Integer,48
 V2 Character,23           Character,48           Character,48
 V3 Character,23           Character,48           Character,48
 V4 Integer,23             Integer,48             Integer,48
 V5 Integer,23             Integer,48             Integer,48
 V6 Character,23           Character,48           Character,48

1 个答案:

答案 0 :(得分:3)

你的第二个方法返回一个数组。 sapply具有simplify参数。如果调用TRUE simplify2array并且R尝试将数据转换为向量或数组。有关详细信息,请参阅?sapply

尝试改为:

ret <- sapply(fn, function(x) { (read.table(x, header = FALSE))[, 1:6]}, simplify=FALSE)