Seperti yang ditanyakan, apakah ada urutan kontrol dalam R yang mirip dengan operator ternary C ? Jika demikian, bagaimana Anda menggunakannya? Terima kasih!
175
Seperti yang ditanyakan, apakah ada urutan kontrol dalam R yang mirip dengan operator ternary C ? Jika demikian, bagaimana Anda menggunakannya? Terima kasih!
ifelse
, atau hanya bentuk yang lebih kompak?if (x>1) y=2 else y=3
. Menulisy=
sekali memiliki daya tarik tertentu untuk itu.Jawaban:
Seperti
if
berfungsiR
dan mengembalikan evaluasi terbaru, jika-lain setara dengan?:
.Kekuatan R adalah vektorisasi. Vektorisasi operator ternary adalah
ifelse
:Hanya bercanda, Anda dapat mendefinisikan c-style
?:
:di sini, Anda tidak perlu peduli tentang tanda kurung:
tetapi Anda membutuhkan tanda kurung untuk penugasan :(
Akhirnya, Anda dapat melakukan cara yang sangat mirip dengan c:
Anda dapat menyingkirkan tanda kurung:
Ini bukan untuk penggunaan sehari-hari, tetapi mungkin baik untuk mempelajari beberapa bahasa R internal.
sumber
Seperti kata orang lain, gunakan
ifelse
, tetapi Anda dapat mendefinisikan operator sehingga Anda hampir memiliki sintaksis operator ternary.Ini benar-benar berfungsi jika Anda mendefinisikan operator tanpa
%
tanda, sehingga Anda dapat melakukannya(Ini berfungsi karena diutamakan
:
lebih rendah daripada?
.)Sayangnya, itu kemudian merusak bantuan dan urutan operator yang ada.
sumber
Sama seperti sebuah lelucon, Anda dapat mendefinisikan kembali
?
operator untuk (hampir) bekerja seperti operator ternary (INI ADALAH BAD IDEA):... Tapi Anda harus meletakkan ekspresi di dalam tanda kurung karena presedensi default tidak seperti dalam C.
Ingatlah untuk mengembalikan fungsi bantuan lama saat Anda selesai bermain:
sumber
Saya akan melihat
ifelse
perintah. Saya akan menyebutnya lebih baik karena itu juga vektor. Contoh menggunakan dataset mobil:sumber
ifelse
contoh Anda? ;)Tautan Anda menunjuk ke sebuah
if
pernyataan.Jika variabel input Anda adalah vektor, maka
ifelse
mungkin lebih cocok:Untuk mengakses halaman bantuan
if
, Anda harus menyematkanif
backtick di:Halaman bantuan untuk
ifelse
berada di:sumber
print(if (x<2) "Less than" else "Greater than")
Tidak ada secara eksplisit, tetapi Anda dapat melakukannya:
atau
Perbedaan antara keduanya adalah bahwa
condition1
harus menjadi vektor logis dari panjang 1, sementaracondition2
harus menjadi vektor logis panjang yang sama denganx
,y
, danz
. Yang pertama akan mengembalikan salah satuy
atauz
(seluruh objek), sedangkan yang kedua akan mengembalikan elemen yang sesuai dariy
(condition2==TRUE
) atauz
(condition2==FALSE
).Juga catatan itu
ifelse
akan lebih lambat dariif
/else
jikacondition
,y
danz
semua vektor dengan panjang 1.sumber
if
berfungsi seperti ifelse yang tidak di-revisi jika digunakan dengan cara berikut:Keuntungan menggunakan ini lebih dari ifelse adalah ketika vektorisasi di jalan (yaitu saya punya skalar boolean dan daftar / hal vektor sebagai hasilnya)
sumber