Chcę podzielić wiersz w skrypcie R na wiele wierszy (ponieważ jest za długi). W jaki sposób mogę to zrobić?
Konkretnie mam taką linię jak
setwd('~/a/very/long/path/here/that/goes/beyond/80/characters/and/then/some/more')
Czy można podzielić długą ścieżkę na wiele linii? próbowałem
setwd('~/a/very/long/path/here/that/goes/beyond/80/characters/and/
then/some/more')
z return
kluczem na końcu pierwszej linii; ale to nie działa.
Dzięki.
paste0
jeszcze nie istniał, kiedy pisałem odpowiedź 2+ lata temu.Tak, komentarze są za małe. W każdym razie @Dirk ma rację.
R nie trzeba mówić, że kod zaczyna się w następnej linii. Jest mądrzejszy niż Python ;-) i po prostu będzie czytać następny wiersz, gdy uzna, że instrukcja jest „nie zakończona”. Właściwie w twoim przypadku przeszedł również do następnej linii, ale R przyjmuje powrót jako znak, gdy jest umieszczony między "".
Pamiętaj, że musisz się upewnić, że kod nie jest skończony. Porównać
z
Tak więc, rozkładając kod w wielu wierszach, musisz upewnić się, że R wie, że coś nadchodzi, albo przez:
Kiedy mówimy o strunach, to nadal działa, ale musisz być trochę ostrożny. Możesz otworzyć cudzysłowy, a R będzie czytać dalej, dopóki go nie zamkniesz. Ale każdy znak, w tym nowa linia, będzie postrzegany jako część ciągu:
To jest powód, dla którego w tym przypadku twój kod nie działał: ścieżka nie może zawierać znaku nowego wiersza (
\n
). Więc to też, dlaczego lepiej używać roztworu zpaste()
lubpaste0()
Dirk proponowane.źródło
paste("~one",\n"/two")
po prostu potrzebujesz("~one" \n "/two")
. upuść przecinki ipaste
. Nie wyglądam na oszołomionego językiem. Używam obu języków, ale zawsze uważałem, że wklejanie jest irytujące.("one"\n "/one.one" # some comment\n "/two")'
Przykłady w stackoverflow.com/questions/10660435/ ...leaving a bracket open, or ending the line with an operator
te dwa są drogą do zrobienia.Powyższa metoda Dirka absolutnie zadziała, ale jeśli szukasz sposobu na wprowadzenie długiego ciągu, w którym ważne jest zachowanie białych znaków / struktury (przykład: zapytanie SQL używające RODBC), istnieje dwuetapowe rozwiązanie.
1) Wprowadź ciąg tekstowy w wielu wierszach
2) R wprowadzi kilka
\n
postaci. Usuń te zstrwrap()
, które niszczy białe znaki, zgodnie z dokumentacją :Mówiąc strwrap, aby zawijał twój tekst do bardzo, bardzo długiego wiersza, otrzymasz pojedynczy wektor znakowy bez białych znaków / znaków nowej linii.
źródło
strwrap
może zwrócić wektor wielu ciągów, nawet jeśli łańcuch źródłowy nie przekracza 10 tys. Znaków. Spróbujstrwrap("a\n\nb")
. Zwróci wektor o długości 3 i musisz go wkleić z powrotem zapaste(strwrap("a\n\nb"), collapse=" ")
pomocą kleju do znaków spacji, aby zwinąć wektor.W tym konkretnym przypadku jest
file.path
:źródło
Wiem, że ten post jest stary, ale miałem taką sytuację i chcę tylko podzielić się moim rozwiązaniem. Wszystkie powyższe odpowiedzi działają poprawnie. Ale jeśli masz kod, taki jak ten w składni łańcuchowej data.table, staje się on trudnym wyzwaniem. np. Miałem taki problem.
mass <- files[, Veg:=tstrsplit(files$file, "/")[1:4][[1]]][, Rain:=tstrsplit(files$file, "/")[1:4][[2]]][, Roughness:=tstrsplit(files$file, "/")[1:4][[3]]][, Geom:=tstrsplit(files$file, "/")[1:4][[4]]][
czasy]<=12000]
Wypróbowałem większość powyższych sugestii i nie zadziałały. ale doszedłem do wniosku, że można je podzielić po przecinku w środku
[]
. Dzielenie][
nie działa.źródło