Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.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解析tsv,下标越界错误_R_Csv - Fatal编程技术网

R解析tsv,下标越界错误

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)

我对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)
  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