我正在调查R的行为,并找出了一些有用的东西。
我将使用包geoR作为参考,因为它是我正在使用的包。
我似乎不明白细分列表是如何工作的。我有下面的代码。
install.packages("geoR", dependencies = T)
library(geoR)
v.1 <- variog(wolfcamp)
v.2 <- variog(wolfcamp, trend = "1st")
vg <- list(v.1, v.2)
names(vg) <- c("Constant", "Linear")其中我创建了两个变量函数(这些函数的性质与此无关)。这些都是“变异函数”类的对象,可以快速检查。
在每个变异函数中,有两个向量,"u“和"v",我想提取它们。因为我把它们放在一个列表中,所以我希望能够通过简单的子设置来检索它们。
>vg[1]$Constant$u
[1] 16.77718 50.33154 83.88591 117.44027 150.99463 184.54899 218.10335
[8] 251.65772 285.21208 318.76644 352.32080 385.87517 419.42953
>vg[1]$Constant$v
[1] 1796.634 3690.930 7857.991 12440.353 23165.716 31798.304
[7] 38956.743 52007.883 67601.931 94523.535 159900.019 186464.824
[13] 219033.678现在,如果我使用引号中的中间子集调用相同的对象,则得到相同的结果。
> vg[1]$"Constant"$u
[1] 16.77718 50.33154 83.88591 117.44027 150.99463 184.54899 218.10335
[8] 251.65772 285.21208 318.76644 352.32080 385.87517 419.42953但是,如果我调用函数输出的子集或定义为函数输出的对象的子集,则输出是不一样的。
k <- names(vg)[1]
> vg[1]$k$u
NULL这一切为什么要发生?这与类变异函数定义的细节有关吗?还是我对列表设置不了解?谢谢
发布于 2017-11-27 03:54:11
它与class‘变异函数’无关,而是在传递对象时提取list元素的一般行为。使用list可以找到str(vg)的结构。
提取单个list元素的方法是使用[[。这既适用于对象,也适用于元素或索引的名称,也就是说,如果我们想使用对象'k‘提取
vg[[k]]$u
#[1] 16.77718 50.33154 83.88591 117.44027 150.99463 184.54899 218.10335 251.65772 285.21208 318.76644
#[11] 352.32080 385.87517 419.42953注意,没有使用vg[1],也不需要它,因为vg[1]仍然没有提取‘常数’元素。
vg[[1]]$u
#[1] 16.77718 50.33154 83.88591 117.44027 150.99463 184.54899 218.10335 251.65772 285.21208 318.76644
#[11] 352.32080 385.87517 419.42953其中1是第一个列表元素,即“常客”
如果我们使用的是名称本身
vg[['Constant']]$uhttps://stackoverflow.com/questions/47499957
复制相似问题