R解析tsv,下标越界错误
我对R非常陌生,在读取文件时遇到了一个错误R解析tsv,下标越界错误,r,csv,R,Csv,我对R非常陌生,在读取文件时遇到了一个错误 importSilvaNgsDataFile <- function(file){ sampleNames <- unlist(strsplit(readLines(file,n=1),split="\t")) otuTable <- read.csv(file, header=FALSE, sep="\t",quote="",dec=".", skip=1,row.names=length(sampleNames)+1)
importSilvaNgsDataFile <- function(file){
sampleNames <- unlist(strsplit(readLines(file,n=1),split="\t"))
otuTable <- read.csv(file, header=FALSE, sep="\t",quote="",dec=".", skip=1,row.names=length(sampleNames)+1)
inputData <- list(sampleNames=sampleNames, otuTable=otuTable)
return(inputData)
}
mydata <- importSilvaNgsDataFile('silva_otus.tsv')
silva_otus.tsv
看起来像:
31_F6_57.8 32_F7_55.4 36_F1_57.1 37_F2_57.2 41_E6_55.1 42_E7_56.6 43_E8_57.3 44_E9_58.3 46_D1_55 47_D2_56.7 48_D3_57.2 49_D4_58 51_D6_53.6 52_D7_55 53_D8_56.7 56_E1_52.4 57_E2_55.2 58_E3_56.6
ID0000002M 408 355 293 805 256 292 614 345 505 455 353 53 231 203 417 581 249 342
ID0000003M 120 207 43 142 71 60 266 825 89 87 194 1807 91 68 261 151 33 69
ID0000007M 13 16 12 37 9 9 25 62 7 13 15 120 9 6 38 16 10 12
我看不到
rlabp
是如何出现的,我从未尝试用[rlabp]
索引任何东西。我试图搜索rlabp
,但没有看到任何明显的联系。函数有问题吗?我想你的问题就在这里(我不是R程序员,所以不太确定):
在这里,您将该列表的长度增加1,可能认为标题中少了一项,但事实并非如此
tsv数据本身是有效的
更新:
好的,在R中做了一个快速测试,上面的问题似乎就是问题所在
要解决下标越界问题,请删除+1
:
row.names=length(sampleNames)
但这将使用最后一列的值作为行名称..:
$sampleNames
[1] "" "31_F6_57.8" "32_F7_55.4" "36_F1_57.1" "37_F2_57.2" "41_E6_55.1"
[7] "42_E7_56.6" "43_E8_57.3" "44_E9_58.3" "46_D1_55" "47_D2_56.7" "48_D3_57.2"
[13] "49_D4_58" "51_D6_53.6" "52_D7_55" "53_D8_56.7" "56_E1_52.4" "57_E2_55.2"
[19] "58_E3_56.6"
$otuTable
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16 V17 V18
342 ID0000002M 408 355 293 805 256 292 614 345 505 455 353 53 231 203 417 581 249
69 ID0000003M 120 207 43 142 71 60 266 825 89 87 194 1807 91 68 261 151 33
12 ID0000007M 13 16 12 37 9 9 25 62 7 13 15 120 9 6 38 16 10
您可能希望使用第一列作为名称(row.names=1
):
otuTable看起来是您期望的行数问题,您确定strsplit操作中的row.names数就是您想要的吗?您的row.names是一个数字“20”,但它应该是一个长度等于行号的向量。即使您说1:length(sampleNames)+1
,当您只有3行时,这将是20项向量。请回顾一下您试图通过行实现的目标。姓名
我感谢您的全面回复,这就是问题所在。谢谢
row.names=length(sampleNames)+1
row.names=length(sampleNames)
$sampleNames
[1] "" "31_F6_57.8" "32_F7_55.4" "36_F1_57.1" "37_F2_57.2" "41_E6_55.1"
[7] "42_E7_56.6" "43_E8_57.3" "44_E9_58.3" "46_D1_55" "47_D2_56.7" "48_D3_57.2"
[13] "49_D4_58" "51_D6_53.6" "52_D7_55" "53_D8_56.7" "56_E1_52.4" "57_E2_55.2"
[19] "58_E3_56.6"
$otuTable
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16 V17 V18
342 ID0000002M 408 355 293 805 256 292 614 345 505 455 353 53 231 203 417 581 249
69 ID0000003M 120 207 43 142 71 60 266 825 89 87 194 1807 91 68 261 151 33
12 ID0000007M 13 16 12 37 9 9 25 62 7 13 15 120 9 6 38 16 10
otuTable <- read.csv(file, header=FALSE, sep="\t",quote="",dec=".", skip=1, row.names=1)
$sampleNames
[1] "" "31_F6_57.8" "32_F7_55.4" "36_F1_57.1" "37_F2_57.2" "41_E6_55.1"
[7] "42_E7_56.6" "43_E8_57.3" "44_E9_58.3" "46_D1_55" "47_D2_56.7" "48_D3_57.2"
[13] "49_D4_58" "51_D6_53.6" "52_D7_55" "53_D8_56.7" "56_E1_52.4" "57_E2_55.2"
[19] "58_E3_56.6"
$otuTable
V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16 V17 V18 V19
ID0000002M 408 355 293 805 256 292 614 345 505 455 353 53 231 203 417 581 249 342
ID0000003M 120 207 43 142 71 60 266 825 89 87 194 1807 91 68 261 151 33 69
ID0000007M 13 16 12 37 9 9 25 62 7 13 15 120 9 6 38 16 10 12