ప్రధాన కంటెంట్‌కు వెళ్లండి
మాడ్యూల్ 3 · 2లో పాఠం 1కోర్సులో 5/10~12 min
మాడ్యూల్ పాఠాలు (1/2)

రచన విధులు

Rలో, ఫంక్షన్‌లు ఫస్ట్-క్లాస్ పౌరులు (వాటికి సంబంధించిన వస్తువులు) మరియు మీ కోడ్‌ను మాడ్యులర్, పునర్వినియోగం మరియు చక్కగా వ్యవస్థీకృత బ్లాక్‌లుగా రూపొందించడానికి మిమ్మల్ని అనుమతిస్తాయి.

ఒక ఫంక్షన్ నిర్వచించడం

ఫంక్షన్‌ని నిర్వచించడానికి, function కీవర్డ్‌ని ఉపయోగించండి మరియు అసైన్‌మెంట్ ఆపరేటర్ <-ని ఉపయోగించి సృష్టించిన వస్తువును వేరియబుల్‌కు (ఫంక్షన్ పేరు) కేటాయించండి:

R
# Simple function definition
greet_user <- function() {
  print("Hello, User!")
}

# Invoking the function
greet_user()

పారామితులు మరియు రిటర్న్ విలువలు

విధులు ఒకటి లేదా అంతకంటే ఎక్కువ పారామితులను ఆమోదించగలవు. విలువను స్పష్టంగా అందించడానికి, return() ఫంక్షన్‌ని ఉపయోగించండి. return() విస్మరించబడితే, ఫంక్షన్ బాడీలో చివరిగా మూల్యాంకనం చేయబడిన వ్యక్తీకరణ యొక్క విలువను R స్వయంచాలకంగా అందిస్తుంది.

R
# Function that adds two numbers and returns the result
add_numbers <- function(a, b) {
  sum_result <- a + b
  return(sum_result)
}

total <- add_numbers(5, 7)
print(total) # Prints 12

డిఫాల్ట్ వాదనలు

మీరు ఫంక్షన్ యొక్క పారామితుల కోసం డిఫాల్ట్ విలువలను పేర్కొనవచ్చు. ఫంక్షన్ ప్రారంభించబడినప్పుడు వాదన అందించబడకపోతే, R డిఫాల్ట్ విలువను ఉపయోగిస్తుంది:

R
# The function uses a default discount rate of 10% (0.10)
apply_discount <- function(price, discount = 0.10) {
  discounted_price <- price * (1 - discount)
  return(discounted_price)
}

# Uses the default (10%)
print(apply_discount(100)) # Prints 90

# Specifies a custom discount (20%)
print(apply_discount(100, 0.20)) # Prints 80

జాబితాలతో బహుళ విలువలను అందించడం

Rలోని ఫంక్షన్ return() ద్వారా నేరుగా ఒకే వస్తువును మాత్రమే తిరిగి ఇవ్వగలదు కాబట్టి, మనం బహుళ విలువలను (బహుశా వివిధ రకాలు లేదా పొడవులు) అందించాల్సిన అవసరం ఉన్నట్లయితే, మేము వాటిని జాబితా (list) లోపల బండిల్ చేయవచ్చు:

R
get_stats <- function(v) {
  stats <- list(
    mean_val = mean(v),
    max_val = max(v)
  )
  return(stats)
}

results <- get_stats(c(10, 20, 30))
print(results$mean_val) # Prints 20

అనామక విధులు మరియు sapply

వెక్టర్ లేదా జాబితా మూలకాలపై త్వరిత పరివర్తనలను వర్తింపజేయడానికి sapply() వంటి ఫంక్షన్‌లతో జత చేసినప్పుడు అనామక ఫంక్షన్‌లు (ఇన్‌లైన్ పేరు లేకుండా నిర్వచించబడిన విధులు) చాలా ఉపయోగకరంగా ఉంటాయి.

ఆధునిక Rలో (వెర్షన్ 4.1.0 నుండి), మీరు క్లాసిక్ function(x)కి అదనంగా \(x) షార్ట్‌హ్యాండ్ సింటాక్స్‌ని ఉపయోగించి అనామక ఫంక్షన్‌లను నిర్వచించవచ్చు:

R
v <- c(1, 2, 3)

# Using sapply with a classic anonymous function
sapply(v, function(x) x^2) # 1 4 9

# Using sapply with shorthand syntax (R >= 4.1.0)
sapply(v, \(x) x^2) # 1 4 9

మీరే ప్రయత్నించండి

వ్యాయామం#r.m3.l1.e1
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

ఒకే ఆర్గ్యుమెంట్ xని అంగీకరించి, రిటర్న్()ని ఉపయోగించి దాని డబుల్ (x * 2)ని తిరిగి ఇచ్చే డబుల్_వాల్యూ అనే ఫంక్షన్‌ను నిర్వచించండి.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

USA లా సింటాస్సీ: double_value <- ఫంక్షన్(x) {రిటర్న్(x * 2)}

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది

వ్యాయామం#r.m3.l1.e2
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

వెడల్పు మరియు ఎత్తు అనే రెండు ఆర్గ్యుమెంట్‌లను ఆమోదించే గణన_ఏరియా అనే ఫంక్షన్‌ను నిర్వచించండి. ఫంక్షన్ తప్పనిసరిగా రిటర్న్ ()ని ఉపయోగించి వారి ఉత్పత్తిని తిరిగి ఇవ్వాలి.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

వెడల్పు మరియు ఎత్తు పారామితులు మరియు వెడల్పు * ఎత్తుతో ఫంక్షన్‌ను నిర్వచించండి.

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది

వ్యాయామం#r.m3.l1.e3
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

అవసరమైన ఆర్గ్యుమెంట్ మొత్తాన్ని మరియు 0.22 డిఫాల్ట్ విలువతో ఐచ్ఛిక ఆర్గ్యుమెంట్ రేట్‌ను ఆమోదించే గణన_పన్ను అనే ఫంక్షన్‌ను నిర్వచించండి. ఉత్పత్తి మొత్తం * రేటును తిరిగి ఇవ్వండి.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

USA: గణన_పన్ను <- ఫంక్షన్(మొత్తం, రేటు = 0.22) {రిటర్న్(మొత్తం * రేటు)}

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది

వ్యాయామం#r.m3.l1.e4
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

వెక్టర్ vని అంగీకరించే analyse_vector అనే ఫంక్షన్‌ను నిర్వచించండి. ఫంక్షన్ తప్పనిసరిగా మొత్తం (వెక్టార్ యొక్క మొత్తం, మొత్తం (v)తో లెక్కించబడుతుంది) మరియు లెన్ (వెక్టార్ పొడవు, పొడవు(v)తో లెక్కించబడుతుంది) అనే రెండు మూలకాలతో కూడిన జాబితాను అందించాలి.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

వాక్యనిర్మాణాన్ని ఉపయోగించండి: analyse_vector <- ఫంక్షన్(v) {రిటర్న్(జాబితా(మొత్తం = మొత్తం(v), len = పొడవు(v)))}

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది

వ్యాయామం#r.m3.l1.e5
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

వెక్టర్ v ఇచ్చినట్లయితే, ప్రతి మూలకం విలువను మూడు రెట్లు పెంచడానికి (దానిని 3తో గుణించడం) అనామక ఫంక్షన్‌తో sapply() ఫంక్షన్‌ని ఉపయోగించండి. ఫలితాన్ని మూడు రెట్లు వేరియబుల్‌లో సేవ్ చేయండి.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

ఉపయోగించండి: మూడు రెట్లు <- sapply(v, function(x) x * 3)

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది