SORU
1 Aralık 2009, Salı


Fonksiyon birden fazla değer döndürme

hala R mantığı girmeye çalışan... "" yol bir fonksiyon birden fazla değer döndürme sonuçları paketten? en iyi

Bu görünüşte yapamam:

R> functionReturningTwoValues <- function() { return(c(1, 2)) }
R> functionReturningTwoValues()
[1] 1 2
R> a, b <- functionReturningTwoValues()
Error: unexpected ',' in "a,"
R> c(a, b) <- functionReturningTwoValues()
Error in c(a, b) <- functionReturningTwoValues() : object 'a' not found

gerçekten aşağıdakileri yapmanız gerekir?

R> r <- functionReturningTwoValues()
R> a <- r[1]; b <- r[2]

ya R programcı daha çok şöyle bir şey yazardı:

R> functionReturningTwoValues <- function() {return(list(first=1, second=2))}
R> r <- functionReturningTwoValues()
R> r$first
[1] 1
R> r$second
[1] 2

--- Shane'in soruları cevaplamak için düzenlenmiş ---

Gerçekten sonucu isim değer parça vermek istemiyorum. Bir diğer ikinci bileşeni (min max. ilk bileşeni ve bir toplama işlevi başvuruyorum eğer her iki bileşen için aynı işlevi olsaydı yarma onlara ihtiyacımız var) olmaz.

CEVAP
28 ŞUBAT 2013, PERŞEMBE


(1) liste[...]<-Yaklaşık 10 yıl önce bu r-help ilan ettim. Özel bir operatör gerektirmez ama sol taraftaki yazılmış olması gerekir list[...] kullanarak bu gibi:

# run the source command below first
list[a, b] <- functionReturningTwoValues()

Not:Son zamanlarda list gsubfn package geliştirme sürümü eklendi ve üzerinden kaynaklı olabilir:

library(devtools)  
source_url("https://raw.githubusercontent.com/ggrothendieck/gsubfn/master/R/list.R")

Eğer sadece birinci veya ikinci bileşeni gerekiyorsa, bu çok çalışmak:

list[a] <- functionReturningTwoValues()
list[a, ] <- functionReturningTwoValues()
list[, b] <- functionReturningTwoValues()

R-yardıma daha fazla örnek için iplik gösterdi bakın.

(2)Sadece birden fazla birleştirmek amacıyla sonradan değerleri ve dönüş değerleri olarak adlandırılır, o zaman basit bir alternatif with kullanmak için :

myfun <- function() list(a = 1, b = 2)

list[a, b] <- myfun()
a   b

# same
with(myfun(), a   b)

(3) takınBaşka bir alternatif takın

attach(myfun())
a   b

Ve takın . ile EKLEDİ:

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Jason Parker

    Jason Parker

    14 Aralık 2009
  • NCIX Tech Tips

    NCIX Tech Ti

    2 Ocak 2007
  • Plugable

    Plugable

    19 Mayıs 2010