আমি পছন্দ করি purrr::whenএবং এখানে সরবরাহিত অন্যান্য বেস সমাধানগুলি দুর্দান্ত but তবে আমি আরও কমপ্যাক্ট এবং নমনীয় কিছু চাইছিলাম যাতে আমি ফাংশনটি ডিজাইন করলাম pif(পাইপ যদি হয়), উত্তরের শেষে কোড এবং ডকটি দেখুন।
আর্গুমেন্টগুলি হয় ফাংশনগুলির প্রকাশ হতে পারে (সূত্র নোটেশন সমর্থিত), এবং শর্ত থাকলে ইনপুটটি ডিফল্টরূপে অপরিবর্তিত অবস্থায় ফিরে আসে FALSE।
অন্যান্য উত্তরের উদাহরণগুলিতে ব্যবহৃত:
data.frame(a=1:2) %>%
mutate(b=a^2) %>%
pif(~b[1]>1, ~mutate(.,b=b^2)) %>%
mutate(b=b^2)
1:3 %>% pif(sum(.) < 25,sum,0)
1 %>% pif(TRUE,~. + 1) %>% `*`(2)
1 %>% `+`(1) %>% pif(TRUE ,~ .+1)
অন্যান্য উদাহরণ:
iris %>% pif(is.data.frame, dim, nrow)
iris %>% pif(~is.numeric(Species),
~"numeric :)",
~paste(class(Species)[1],":("))
iris %>% pif(nrow(.) > 2, head(.,2))
iris %>% pif(TRUE, dim, warning("this will be evaluated"))
iris %>% pif(TRUE, dim, ~warning("this won't be evaluated"))
ফাংশন
pif <- function(x, p, true, false = identity){
if(!requireNamespace("purrr"))
stop("Package 'purrr' needs to be installed to use function 'pif'")
if(inherits(p, "formula"))
p <- purrr::as_mapper(
if(!is.list(x)) p else update(p,~with(...,.)))
if(inherits(true, "formula"))
true <- purrr::as_mapper(
if(!is.list(x)) true else update(true,~with(...,.)))
if(inherits(false, "formula"))
false <- purrr::as_mapper(
if(!is.list(x)) false else update(false,~with(...,.)))
if ( (is.function(p) && p(x)) || (!is.function(p) && p)){
if(is.function(true)) true(x) else true
} else {
if(is.function(false)) false(x) else false
}
}