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

  • GALERNAYA20

    GALERNAYA20

    19 NİSAN 2011
  • We've moved!

    We've moved!

    7 Ocak 2008
  • Photoshop Pro Help

    Photoshop Pr

    1 Ocak 2007