Как можно избежать "оператор $ недопустим для атомарных векторов" - PullRequest
0 голосов
/ 21 ноября 2018

У меня работает цикл для присвоения значений

for (i in 1:4)
t[i]<-print(noquote(paste0("t_",i)))

, выход которого равен

[1] t_1
[1] t_2
[1] t_3
[1] t_4

Теперь, когда я пытаюсь запустить его вместе с функцией

    for (i in 1:length(t))
    print(sum(t[i]$total_counts))

 it throws up an error: Error: $ operator is invalid for atomic vectors

однако, он работает нормально, если я запустил его как

sum(t_1$total_counts)
[1] 27347116

, что я должен настроить, чтобы мой код работал в цикле.

Пожалуйста, предложите.

1 Ответ

0 голосов
/ 21 ноября 2018

Я предполагаю, что t_1 до t _n - это имена объектов в вашей среде, и вы хотите зациклить эти объекты и выполнить операцию.в этом случае вам нужно использовать get:

t_1 <- data.frame(x=1:10, y = 11:20)
t <- "t_1"
sum(get(t[1])$x)
#[1] 55

. Как подсказывает @joran, лучший способ сделать это - собрать все объекты t_n в список, а затем работать со списком..

t_list <- mget(t)
lapply(t_list, function(df) sum(df$x))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...