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

  • AmeriiK_HD

    AmeriiK_HD

    16 AĞUSTOS 2012
  • DominicFear

    DominicFear

    30 Kasım 2006
  • Tire Rack

    Tire Rack

    31 Mayıs 2007