В 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; }
Причина, по которой вы получаете эту ошибку, состоит в том, что у вас есть 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
Атомные коллекции доступны $
Рекурсивные коллекции не являются. Скорее используется [[ ]]
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
Вы получаете эту ошибку, несмотря на то, что все находится в очереди, из-за конфликта, вызванного одним из пакетов, которые в настоящее время загружены в среду R.
Итак, чтобы решить эту проблему, отсоедините все пакеты, которые не нужны в среде R. Например, когда у меня была такая же проблема, я сделал следующее:
detach(package:neuralnet)
нижняя строка: отделить все библиотеки, которые больше не нужны для выполнения ... и проблема будет решена.
Поскольку $
не работает над атомными векторами. Вместо этого используйте [
или [[
. Из файла справки для $
:
Методы по умолчанию работают несколько иначе для атомных векторов, матриц / массивов и для рекурсивных (list-like, see is.recursive) объектов. $ действителен только для рекурсивных объектов и рассматривается только в разделе ниже для рекурсивных объектов.
blockquote>
x[["ed"]]
будет работать.
x <- as.list(x)
. – Ben Bolker 24 March 2015 в 04:54