beklenebilir. replicate bir ifade bekler, ancak sadece pipon operatörü kullanırken sample()
aramasının sonucunu replicate
'a yapıştırırsınız. Yani 6 kat aynı sonucu elde edersiniz.
quote()
'u kullanarak, sonuç yerine çoğaltılacak ifadeyi geçirmeniz gerekir, ancak bu ifadenin her yinelemesini değerlendirmeyi unutmamalısınız.
quote(sample(c(1:10,-99),6,rep=TRUE)) %>%
replicate(6, .) %>%
sapply(eval)
verir:
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 5 2 10 10 9 2
[2,] 4 3 1 3 -99 1
[3,] 10 2 3 8 2 4
[4,] -99 1 6 2 10 3
[5,] 8 -99 1 9 4 6
[6,] 4 10 8 1 -99 8
burada ne olur:
- boru gönderir ve ifade onu değerlendirilmeden çoğaltmak için.
- kopya olduğunu ifade çoğaltır ve 6 kez bu ifade ile ancak değerlendirilmeden bir listesini döndürür. (Eval)
- sapply listesi geçer ve bu listedeki her ifade yürütür. (Data.frame kullanırken yani) önceki soruya ise
, sen yapmış olabilir mesela:
Şimdi ifadeleri zorlardı fonksiyon
data.frame
yürütülecek, ama aynı zamanda ile bitirmek
quote(sample(c(1:10,-99),6,rep=TRUE)) %>%
replicate(6, .) %>%
data.frame
korkunç değişken isimler, yani ifadenin kendisi.
burada sorunlar hakkında daha fazla bilgi edinmek istiyorsanız, "tembel değerlendirme" denilen ve ne dalmak gerekecek tam olarak boru operatör tarafından nasıl ele alındığını. Ama tüm dürüstlükte, bu durumda boru operatörünü kullanma konusunda hiçbir avantaj görmüyorum. Daha fazla okunabilir değil. Frank'in yorumun gereğince
: Sen
sapply
önlemek için boru ve fonksiyonların yuvalama bir karışımını kullanabilirsiniz. Ama bunun için, doğru şekilde işlemek olmayacak bir kod bloğu veya boru operatörü içine yuvalanmış işlevleri içeren zorunda:
quote(sample(c(1:10,-99),6,rep=TRUE)) %>% {
replicate(6, eval(.)) }
Çok ilginç, ama imho Birincisinde gerçekten yararlı değildir ...
kod, replikat örnek fonksiyonu 6 kez yürütüyor. İkinci kodda, çıktıya örnek işlevine verilir ve bu çıkışı 6 kez çoğaltırsınız. – student