Lapply'nin FUN'ına birkaç argüman geçirme (ve diğerleri * geçerlidir)


109

Ben kullanırken, bir işleve birden fazla argüman geçen ilgili bir sorum var lapplyiçinde R.

Lapply'yi şu sözdizimiyle kullandığımda lapply(input, myfun);- bu kolayca anlaşılabilir ve eğlencemi şöyle tanımlayabilirim:

myfun <- function(x) {
 # doing something here with x
}

lapply(input, myfun);

ve öğeleri argüman inputolarak aktarılır .xmyfun

Peki ya daha fazla argüman aktarmam gerekirse myfunc? Örneğin şu şekilde tanımlanır:

myfun <- function(x, arg1) {
 # doing something here with x and arg1
}

Bu işlevi hem inputöğe ( xargüman olarak) hem de başka bir argüman iletirken nasıl kullanabilirim?


1
R konsolu giriş satırlarının ";" ile sonlandırılması geçmişte muhtemelen bazı makro işleme dilleri kullandığınızın bir işaretidir. Üç nokta argümanı, muhtemelen okumanız gereken ilk "El Kitabı" olan "R'ye giriş" belgesinin "Kendi işlevlerinizi yazma" bölümünün 4. alt bölümünde açıklanmıştır.
IRTFM

Yanıtlar:


124

Yardım sayfasına bakarsanız, tartışmalardan biri lapplygizemlidir .... Yardım sayfasının Argümanlar bölümüne baktığımızda şu satırı buluyoruz:

...: optional arguments to ‘FUN’.

Yani tek yapmanız gereken, lapplygörüşmeye diğer argümanınızı bir argüman olarak dahil etmektir , şöyle ki:

lapply(input, myfun, arg1=6)

ve bunun ne yapacağını bildiği bir argüman olmadığını lapplykabul ederek arg1, onu otomatik olarak aktaracaktır myfun. Diğer tüm applyişlevler aynı şeyi yapabilir.

Ek:... Kendi işlevlerinizi yazarken de kullanabilirsiniz . Örneğin, bir plotnoktada çağıran bir fonksiyon yazdığınızı ve fonksiyon çağrınızdan çizim parametrelerini değiştirebilmek istediğinizi varsayalım. Her parametreyi fonksiyonunuza bağımsız değişken olarak dahil edebilirsiniz, ancak bu can sıkıcıdır. Bunun yerine ...(hem fonksiyonunuza hem de onun içindeki çizim çağrısına bir argüman olarak) kullanabilir ve fonksiyonunuzun otomatik olarak tanımadığı herhangi bir argümana sahip olabilirsiniz plot.


Ya ikinci argümanınız, örneğin, "arg1", "girdi" listesiyle eşleşen bir listeyse? Deneyin zaman (giriş, myfun, ARG1 = input2) lapply input2 bir listesi burada lapply 'giriş' gibi elemanı ile bir kez yerine elemanının tüm listesini geçer gibi görünüyor.
Alan

10
İşe yarayan başka bir gönderide bir cevap buldum: mapply (myfun, df $ input, df $ input2)
Alan,


11

Bunu şu şekilde yapabilirsiniz:

 myfxn <- function(var1,var2,var3){
      var1*var2*var3

    }

    lapply(1:3,myfxn,var2=2,var3=100)

ve cevabı alacaksın:

[[1]] [1] 200

[[2]] [1] 400

[[3]] [1] 600


5
myfun <- function(x, arg1) {
 # doing something here with x and arg1
}

xbir vektör ya da bir listesi ve myfuniçinde lapply(x, myfun)her elemanı için çağrılır xayrı ayrı.

seçenek 1

Eğer bütün kullanmak isterseniz arg1her myfunçağrı ( myfun(x[1], arg1), myfun(x[2], arg1)vs.) kullanın lapply(x, myfun, arg1)(yukarıda belirtildiği gibi).

seçenek 2

Eğer bununla aramak istiyorum myfunher elemana arg1unsurlarının yanı başında ayrı ayrı x( myfun(x[1], arg1[1]), myfun(x[2], arg1[2])vs.), kullanımı mümkün değildir lapply. Bunun yerine mapply(myfun, x, arg1)(yukarıda belirtildiği gibi) veya şunları kullanın apply:

 apply(cbind(x,arg1), 1, myfun)

veya

 apply(rbind(x,arg1), 2, myfun).
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.