रूप other answer में बताया गया है, .dots तर्क एक माना जाता है सूची, और सेटनाम एक सूची में तत्वों का नाम बदलने का एक सुविधाजनक तरीका है।
। डॉट्स तर्क क्या कर रहा है? आइए सबसे पहले वास्तविक बिंदु ...
तर्क के बारे में सोचें। यह मूल्यांकन के लिए अभिव्यक्तियों की एक श्रृंखला है। बिंदुओं के नीचे ...
दो नामित अभिव्यक्ति c = ~ a * scale1
और d = ~ a * scale2
हैं।
scale1 <- -1
scale2 <- -2
df %>%
mutate_(c = ~ a * scale1, d = ~ a * scale2)
#> a b c d
#> 1 1 1 -1 -2
#> 2 2 2 -2 -4
#> 3 3 3 -3 -6
#> 4 4 4 -4 -8
#> 5 5 5 -5 -10
हम सूची में पहले से ही उन अभिव्यक्तियों को एक साथ जोड़ सकते हैं। यही वह जगह है जहां डॉट्स आते हैं। वह पैरामीटर हमें सूची में अभिव्यक्तियों का मूल्यांकन करने के लिए mutate_
बताता है।
bundled <- list(
c2 = ~ a * scale1,
d2 = ~ a * scale2
)
df %>%
mutate_(.dots = bundled)
#> a b c2 d2
#> 1 1 1 -1 -2
#> 2 2 2 -2 -4
#> 3 3 3 -3 -6
#> 4 4 4 -4 -8
#> 5 5 5 -5 -10
हम प्रोग्राम के रूप में सूची में भाव के नाम को अपडेट करना चाहते हैं, तो setNames कि करने के लिए एक सुविधाजनक तरीका है। यदि हम अभिव्यक्ति करते समय प्रोग्रामेटिक रूप से स्थिरांक और परिवर्तनीय नामों को मिलान करना चाहते हैं, तो lazyeval पैकेज ऐसा करने के सुविधाजनक तरीके प्रदान करता है। नीचे मैं दोनों भाव की एक सूची बनाने के लिए, उन्हें नाम, और उनके साथ mutate_
# Imagine some dropdown boxes in a Shiny app, and this is what user requested
selected_func1 <- "min"
selected_func2 <- "max"
selected_var1 <- "a"
selected_var2 <- "b"
# Assemble expressions from those choices
bundled2 <- list(
interp(~fun(x), fun = as.name(selected_func1), x = as.name(selected_var1)),
interp(~fun(x), fun = as.name(selected_func2), x = as.name(selected_var2))
)
bundled2
#> [[1]]
#> ~min(a)
#>
#> [[2]]
#> ~max(b)
# Create variable names
exp_name1 <- paste0(selected_func1, "_", selected_var1)
exp_name2 <- paste0(selected_func2, "_", selected_var2)
bundled2 <- setNames(bundled2, c(exp_name1, exp_name2))
bundled2
#> $min_a
#> ~min(a)
#>
#> $max_b
#> ~max(b)
# Evaluate the expressions
df %>%
mutate_(.dots = bundled2)
#> a b min_a max_b
#> 1 1 1 1 5
#> 2 2 2 1 5
#> 3 3 3 1 5
#> 4 4 4 1 5
#> 5 5 5 1 5
स्रोत
2016-03-23 01:18:46
प्रतीक्षा यह काफी नहीं है का मूल्यांकन! जो कॉलम नाम को 'new_name' के साथ बदल देता है लेकिन हम इसे अपने * वैल्यू * से बदलना चाहते हैं! – AndrewMacDonald
यह वास्तव में कुछ अतिरिक्त प्रश्न उठाता है। मुझे लगता है कि मेरी समस्या का मूल यह है कि मैं .dots के वाक्यविन्यास या कार्यक्षमता को पूरी तरह से समझ नहीं पा रहा हूं। क्या वहां प्रलेखन या विग्नेट है जो इसे "एनएसई" विग्नेट के बाहर अधिक विस्तार से संभालता है? –
'विग्नेट ("लाज़ेवल") है' – AndrewMacDonald