W końcu udało mi się opracować kod do skrobania . Wydawało się, że działa dobrze, a potem nagle, gdy uruchomiłem go ponownie, pojawił się następujący komunikat o błędzie:
Error in url[i] = paste("http://en.wikipedia.org/wiki/", gsub(" ", "_", :
object of type 'closure' is not subsettable
Nie jestem pewien dlaczego, ponieważ nic nie zmieniłem w moim kodzie.
Proszę doradź.
library(XML)
library(plyr)
names <- c("George Clooney", "Kevin Costner", "George Bush", "Amar Shanghavi")
for(i in 1:length(names)) {
url[i] = paste('http://en.wikipedia.org/wiki/', gsub(" ","_", names[i]) , sep="")
# some parsing code
}
[]
zamiast()
!Odpowiedzi:
Ogólnie ten komunikat o błędzie oznacza, że próbowałeś użyć indeksowania funkcji. Możesz odtworzyć ten komunikat o błędzie, na przykład za pomocą
Zamknięcie wspomniane w komunikacie o błędzie to (luźno) funkcja i środowisko, które przechowuje zmienne, gdy funkcja jest wywoływana.
W tym konkretnym przypadku, jak wspomniał Joshua, próbujesz uzyskać dostęp do
url
funkcji jako zmiennej. Jeśli zdefiniujesz zmienną o nazwieurl
, błąd zniknie.W ramach dobrej praktyki należy zazwyczaj unikać nazywania zmiennych po funkcjach typu base-R. (Wywoływanie zmiennych
data
jest częstym źródłem tego błędu).Istnieje kilka powiązanych błędów przy próbie podziału operatorów lub słów kluczowych na podzbiory.
Jeśli napotkasz ten problem w programie
shiny
, najbardziej prawdopodobną przyczyną jest to, że próbujesz pracować zreactive
wyrażeniem bez wywoływania go jako funkcji przy użyciu nawiasów.Chociaż często pracujemy z wyrażeniami reaktywnymi tak, jakby były ramkami danych, w rzeczywistości są to funkcje, które zwracają ramki danych (lub inne obiekty).
Ale jeśli spróbujemy podzielić ją na podzbiory bez nawiasów, to w rzeczywistości próbujemy zindeksować funkcję i otrzymujemy błąd:
źródło
Nie definiujesz wektora
url
przed próbą jego podzbioru.url
jest również funkcją w pakiecie podstawowym, więcurl[i]
próba podzbioru tej funkcji ... co nie ma sensu.Prawdopodobnie zdefiniowałeś
url
w swojej poprzedniej sesji R, ale zapomniałeś skopiować ten kod do swojego skryptu.źródło
W przypadku tego podobnego błędu Ostrzeżenie: Błąd w $: obiekt typu 'closure' nie jest podzestawem [Brak dostępnych śladów stosu]
Po prostu dodaj odpowiednią nazwę pakietu używając: np
zamiast tagów (....)
napisz błyszczące :: tagi (....)
źródło
Miałem ten problem podczas próby usunięcia elementu interfejsu użytkownika wewnątrz zdarzenia reaktywnego:
Otrzymałem ten błąd, ale nie w wierszu elementu removeUI, z jakiegoś powodu był to następny obserwator po. Usunięcie metody removeUI z eventReactive i umieszczenie jej w innym miejscu usunęło ten błąd.
źródło
Myślę, że chciałeś to zrobić
url[i] <- paste(...
zamiast
url[i] = paste(...
. Jeśli tak, wymień=
się<-
.źródło