没有得到预期的数组长度

时间:2018-06-16 22:18:04

标签: perl

 file.names <- list.files(path, pattern="*.shp", full.names=T, recursive=FALSE)

for (m in 1:500){
Map <- readOGR(file.names[m])
}

...当你运行这个时我得到每个阵列一个长度 - 我分别期望长度分别为2,3和3

我在这里做错了什么? (其他stackoverflow Q&amp; A似乎暗示(对我来说)使用标量如上所述!

2 个答案:

答案 0 :(得分:3)

[ ]构造匿名数组并返回对它的引用 - 标量。因此,您要为所有三个数组分配一个标量,这是每个数组中第一个也是唯一一个元素。

最后一个也有@person@results扁平化为一个列表,可能无意。

我不确定您的代码的意图,但这里是您可能想要的猜测

my @person  = ("John", "Barnes");
my @results = (['Chemisty', '87'], ['French', '40'], ['Maths', '90']);
my @record  = (\@person, \@results);

这些现在是数组,首先是字符串,另外两个是数组引用。

现在你可以根据需要获得大小,但丢失scalar:当在标量context中使用数组时 - 例如,分配给标量变量 - 返回元素数。

答案 1 :(得分:3)

[ LIST ]创建一个数组,为其分配LIST,然后返回对该数组的引用,就像您已完成以下操作一样:

do { my @anon = ( LIST ); \@anon }

此引用是您为阵列分配的唯一内容。修正:

my @person = ( "John", "Barnes" );
my @results = ( ['Chemisty', '87'], ['French', '40'], ['Maths', '90'] );

目前还不清楚你想要@record包含什么。它是@person的引用还是对@results的引用?这只是两个要素(但你说你期望3)。修正:

my @record = ( \@person, \@results );