[[
может вернуть только один элемент.Я подумал, что [[
вызвало бы ошибку из-за этого, а не из-за ошибки, которую вы видите, но чтение ?"["
говорит о том, что R делает с таким вызовом, и объясняет поведение (из ?"["
):
Рекурсивные (подобные списку) объекты: ....
‘[[’ can be applied recursively to lists, so that if the single
index ‘i’ is a vector of length ‘p’, ‘alist[[i]]’ is equivalent to
‘alist[[i1]]...[[ip]]’ providing all but the final indexing
results in a list.
Причина вашей ошибки заключается в следующем:
> study$results[[c(1,2)]]
[1] -12 -1 3 10 23
, что указывает на то, чтоR действительно сделал это
> study$results[[1]][[2]]
[1] -12 -1 3 10 23
, то есть вернул второй компонент (столбец) первого фрейма данных, который является атомным вектором, потому что R отбрасывает пустое измерение.$
нельзя использовать для атомарных векторов, поэтому возникает ошибка.
Если вы хотите перебрать список, который study$results
, lapply()
или sapply()
ваши друзья:
> lapply(study$results, function(y) max(y[, "maxTemp"], na.rm = TRUE))
[[1]]
[1] 23
[[2]]
[1] 21
> sapply(study$results, function(y) max(y[, "maxTemp"], na.rm = TRUE))
[1] 23 21
Если вы указали имена для компонентов в $results
, вы также получите их в выводе:
> names(study$results) <- study$region
> lapply(study$results, function(y) max(y[, "maxTemp"], na.rm = TRUE))
$Hamburg
[1] 23
$Bremen
[1] 21
> sapply(study$results, function(y) max(y[, "maxTemp"], na.rm = TRUE))
Hamburg Bremen
23 21
, который проще в использовании и тогда вам не нужен $region
компонент, если хотите.