Как решить ошибку: оператор $ недействителен для атомных векторов [duplicate]

В Windows:

  #include & lt; cstdlib & gt;  int main () {std :: system ("cls");  return 0;  }  

В Linux / Unix:

  #include & lt; cstdlib & gt;  int main () {std :: system ("clear");  return 0;  }  
38
задан Jilber Urbina 25 April 2014 в 18:46
поделиться

5 ответов

Причина, по которой вы получаете эту ошибку, состоит в том, что у вас есть vector.

Если вы хотите использовать оператор $, вам просто нужно преобразовать его в data.frame. Но поскольку у вас есть только одна строка в этом конкретном случае, вам также нужно будет транспонировать ее; в противном случае bob и ed станут вашими именами строк вместо имен столбцов, которые, как мне кажется, вам нужны.

x <- c(1, 2)
x
names(x) <- c("bob", "ed")
x <- as.data.frame(t(x))
x$ed
[1] 2
30
ответ дан Adam Smith 15 August 2018 в 17:05
поделиться
  • 1
    Было бы проще использовать x <- as.list(x). – Ben Bolker 24 March 2015 в 04:54
  • 2
    yes for 1 item as.list будет лучше. Я никогда не использую списки, поэтому я всегда забываю о них. – Dalupus 10 March 2016 в 20:33

Атомные коллекции доступны $

Рекурсивные коллекции не являются. Скорее используется [[ ]]

 Browse[1]> is.atomic(list())
 [1] FALSE

 Browse[1]> is.atomic(data.frame())
 [1] FALSE

 Browse[1]> is.atomic(class(list(foo="bar")))
 [1] TRUE

 Browse[1]> is.atomic(c(" lang "))
 [1] TRUE

R иногда может быть забавным

 a = list(1,2,3)
 b = data.frame(a)
 d = rbind("?",c(b))
 e = exp(1)
 f = list(d)
 print(data.frame(c(list(f,e))))

   X1 X2 X3 X2.71828182845905
 1  ?  ?  ?          2.718282
 2  1  2  3          2.718282
0
ответ дан camille 15 August 2018 в 17:05
поделиться
  • 1
    Я думаю, что у вас есть это в обратном направлении. LIsts являются рекурсивными объектами и могут быть доступны через $, числовые векторы являются атомарными и не могут. Я не уверен, что вы пытаетесь показать здесь. – Ben Bolker 24 March 2015 в 04:54

Вы получаете эту ошибку, несмотря на то, что все находится в очереди, из-за конфликта, вызванного одним из пакетов, которые в настоящее время загружены в среду R.

Итак, чтобы решить эту проблему, отсоедините все пакеты, которые не нужны в среде R. Например, когда у меня была такая же проблема, я сделал следующее:

detach(package:neuralnet)

нижняя строка: отделить все библиотеки, которые больше не нужны для выполнения ... и проблема будет решена.

0
ответ дан Chinnappa Reddy 15 August 2018 в 17:05
поделиться
62
ответ дан Jilber Urbina 15 August 2018 в 17:05
поделиться

Поскольку $ не работает над атомными векторами. Вместо этого используйте [ или [[. Из файла справки для $:

Методы по умолчанию работают несколько иначе для атомных векторов, матриц / массивов и для рекурсивных (list-like, see is.recursive) объектов. $ действителен только для рекурсивных объектов и рассматривается только в разделе ниже для рекурсивных объектов.

x[["ed"]] будет работать.

9
ответ дан tmpname12345 15 August 2018 в 17:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: