我在r中有一个optim函数返回一个像这样的东西列表:
[[354]]
r k sigma
389.4 354.0 354.0
但是当我尝试访问say list $ sigma时,它不存在返回NULL。
我尝试过附加,我尝试了名字,我尝试将其分配给矩阵,但这些都不会起作用 任何人都知道如何在我的列表中访问sigma r或k的最低值或最高值?
非常感谢!!
str给了我这个输出:
List of 354
$ : Named num [1:3] -55.25 2.99 119.37
..- attr(*, "names")= chr [1:3] "r" "k" "sigma"
$ : Named num [1:3] -53.91 4.21 119.71
..- attr(*, "names")= chr [1:3] "r" "k" "sigma"
$ : Named num [1:3] -41.7 14.6 119.2
所以我在列表中的列表中有一个双精度(?)我仍然对如何在列表中循环并选择满足我的条件而不从头开始编写函数感到困惑
答案 0 :(得分:9)
关键问题是你有一个列表列表(或者data.frames列表,实际上也是一个列表)。
要确认这一点,请查看is(list[[354]])
。
解决方案只是添加额外级别的索引。下面你有多种方法可以做到这一点。
你可以使用向量作为[[
的索引,例如,如果你想从第354个元素访问第三个元素,你可以使用
myList[[ c(354, 3) ]]
您也可以使用字符不一致,但是,所有嵌套级别都必须具有命名的indecies。
names(myList) <- as.character(1:length(myList))
myList[[ c("5", "sigma") ]]
最后,请尽量避免使用list
,data
,df
等名称。这将导致代码和错误崩溃,这些错误看起来无法解释和神秘意识到他们已经尝试将功能分组
回答上述评论中的问题:如果要查看对象的结构(即对象的“构成”),请使用str
> str(myList)
List of 5
$ :'data.frame': 1 obs. of 3 variables:
..$ a : num 0.654
..$ b : num -0.0823
..$ sigma: num -31
$ :'data.frame': 1 obs. of 3 variables:
..$ a : num -0.656
..$ b : num -0.167
..$ sigma: num -49
$ :'data.frame': 1 obs. of 3 variables:
..$ a : num 0.154
..$ b : num 0.522
..$ sigma: num -89
$ :'data.frame': 1 obs. of 3 variables:
..$ a : num 0.676
..$ b : num 0.595
..$ sigma: num 145
$ :'data.frame': 1 obs. of 3 variables:
..$ a : num -0.75
..$ b : num 0.772
..$ sigma: num 6
答案 1 :(得分:0)
如果您想要 - 例如 - 所有sigma,您可以使用sapply:
sapply(list, function(x)x["sigma"])
您可以使用它来查找最小值和最大值:
range(sapply(list, function(x)x["sigma"]))
答案 2 :(得分:0)
使用,do.call
你可以这样做:
do.call('[',mylist,354)['sigma']