Saya ingin membagi baris dalam skrip R menjadi beberapa baris (karena terlalu panjang). Bagaimana aku melakukan itu?
Secara khusus, saya memiliki garis seperti
setwd('~/a/very/long/path/here/that/goes/beyond/80/characters/and/then/some/more')
Apakah mungkin untuk membagi jalur panjang menjadi beberapa baris? Saya mencoba
setwd('~/a/very/long/path/here/that/goes/beyond/80/characters/and/
then/some/more')
dengan return
kunci di akhir baris pertama; tapi itu tidak berhasil.
Terima kasih.
paste0
belum ada ketika saya menulis jawabannya 2+ tahun yang lalu.Bah, komentar terlalu kecil. Ngomong-ngomong, @Dirk benar sekali.
R tidak perlu diberi tahu bahwa kode tersebut dimulai pada baris berikutnya. Ini lebih pintar dari Python ;-) dan hanya akan terus membaca baris berikutnya setiap kali menganggap pernyataan sebagai "belum selesai". Sebenarnya, dalam kasus Anda, ini juga pergi ke baris berikutnya, tetapi R mengambil pengembalian sebagai karakter ketika ditempatkan di antara "".
Ingat, Anda harus memastikan kode Anda belum selesai. Membandingkan
a <- 1 + 2 + 3
dengan
a <- 1 + 2 + 3
Jadi, saat menyebarkan kode ke beberapa baris, Anda harus memastikan bahwa R mengetahui sesuatu akan datang, baik dengan:
Saat kita berbicara tentang string, ini masih berfungsi tetapi Anda harus sedikit berhati-hati. Anda dapat membuka tanda kutip dan R akan terus membaca sampai Anda menutupnya. Tetapi setiap karakter, termasuk baris baru, akan dilihat sebagai bagian dari string:
x <- "This is a very long string over two lines." x ## [1] "This is a very\nlong string over two lines." cat(x) ## This is a very ## long string over two lines.
Itulah alasan mengapa dalam kasus ini, kode Anda tidak berfungsi: jalur tidak boleh berisi karakter baris baru (
\n
). Jadi itu juga mengapa Anda lebih baik menggunakan solusi denganpaste()
atau yangpaste0()
diusulkan Dirk.sumber
paste("~one",\n"/two")
Anda hanya perlu("~one" \n "/two")
. hilangkan koma danpaste
. Tidak mencari bahasa smackdown. Saya menggunakan kedua bahasa tetapi selalu meskipun paste itu mengganggu.("one"\n "/one.one" # some comment\n "/two")'
contoh di stackoverflow.com/questions/10660435/…leaving a bracket open, or ending the line with an operator
keduanya adalah cara untuk pergi.Metode Dirk di atas benar-benar akan berfungsi, tetapi jika Anda mencari cara untuk memasukkan string panjang di mana spasi / struktur penting untuk dipertahankan (contoh: kueri SQL menggunakan RODBC) ada solusi dua langkah.
1) Masukkan string teks ke dalam beberapa baris
long_string <- "this is a long string with whitespace"
2) R akan memperkenalkan banyak
\n
karakter. Hapus mereka denganstrwrap()
, yang menghancurkan spasi, sesuai dengan dokumentasi :strwrap(long_string, width=10000, simplify=TRUE)
Dengan memberi tahu strwrap untuk membungkus teks Anda ke baris yang sangat, sangat panjang, Anda mendapatkan vektor karakter tunggal tanpa spasi / karakter baris baru.
sumber
strwrap
mungkin mengembalikan vektor beberapa string meskipun string sumber tidak melebihi 10k karakter. Cobastrwrap("a\n\nb")
. Ini akan mengembalikan vektor dengan panjang 3 dan Anda perlu menempelkannya kembali menggunakanpaste(strwrap("a\n\nb"), collapse=" ")
lem karakter spasi untuk menutup vektor.Untuk kasus khusus itu ada
file.path
:File <- file.path("~", "a", "very", "long", "path", "here", "that", "goes", "beyond", "80", "characters", "and", "then", "some", "more") setwd(File)
sumber
Saya tahu posting ini sudah tua, tetapi saya memiliki situasi seperti ini dan hanya ingin membagikan solusi saya. Semua jawaban di atas berfungsi dengan baik. Tetapi jika Anda memiliki Kode seperti yang ada dalam sintaks rantai data.table, itu menjadi sedikit menantang. misalnya saya punya masalah seperti ini.
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]]][
waktu]<=12000]
Saya mencoba sebagian besar saran di atas dan tidak berhasil. tapi saya menemukan bahwa mereka dapat dipisahkan setelah koma di dalamnya
[]
. Memisahkan saat][
tidak berhasil.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]]][`time_[s]`<=12000]
sumber