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

  • Cole Rolland

    Cole Rolland

    23 Kasım 2008
  • Edgar flores

    Edgar flores

    7 HAZİRAN 2006
  • Kayla Caton - Peet

    Kayla Caton

    23 HAZİRAN 2012