# Goals: To write functions
# To write functions that send back multiple objects.
# FIRST LEARN ABOUT LISTS --
X = list(height=5.4, weight=54)
print("Use default printing --")
print(X)
print("Accessing individual elements --")
cat("Your height is ", X$height, " and your weight is ", X$weight, "\n")
# FUNCTIONS --
square <- function(x) {
return(x*x)
}
cat("The square of 3 is ", square(3), "\n")
# default value of the arg is set to 5.
cube <- function(x=5) {
return(x*x*x);
}
cat("Calling cube with 2 : ", cube(2), "\n") # will give 2^3
cat("Calling cube : ", cube(), "\n") # will default to 5^3.
# LEARN ABOUT FUNCTIONS THAT RETURN MULTIPLE OBJECTS --
powers <- function(x) {
parcel = list(x2=x*x, x3=x*x*x, x4=x*x*x*x);
return(parcel);
}
X = powers(3);
print("Showing powers of 3 --"); print(X);
# WRITING THIS COMPACTLY (4 lines instead of 7)
powerful <- function(x) {
return(list(x2=x*x, x3=x*x*x, x4=x*x*x*x));
}
print("Showing powers of 3 --"); print(powerful(3));
# In R, the last expression in a function is, by default, what is
# returned. So you could equally just say:
powerful <- function(x) {list(x2=x*x, x3=x*x*x, x4=x*x*x*x)}
IyBHb2FsczogVG8gd3JpdGUgZnVuY3Rpb25zCiMgICAgICAgIFRvIHdyaXRlIGZ1bmN0aW9ucyB0aGF0IHNlbmQgYmFjayBtdWx0aXBsZSBvYmplY3RzLgoKIyBGSVJTVCBMRUFSTiBBQk9VVCBMSVNUUyAtLQpYID0gbGlzdChoZWlnaHQ9NS40LCB3ZWlnaHQ9NTQpCnByaW50KCJVc2UgZGVmYXVsdCBwcmludGluZyAtLSIpCnByaW50KFgpCnByaW50KCJBY2Nlc3NpbmcgaW5kaXZpZHVhbCBlbGVtZW50cyAtLSIpCmNhdCgiWW91ciBoZWlnaHQgaXMgIiwgWCRoZWlnaHQsICIgYW5kIHlvdXIgd2VpZ2h0IGlzICIsIFgkd2VpZ2h0LCAiXG4iKQoKIyBGVU5DVElPTlMgLS0Kc3F1YXJlIDwtIGZ1bmN0aW9uKHgpIHsKICByZXR1cm4oeCp4KQp9CmNhdCgiVGhlIHNxdWFyZSBvZiAzIGlzICIsIHNxdWFyZSgzKSwgIlxuIikKCiAgICAgICAgICAgICAgICAgIyBkZWZhdWx0IHZhbHVlIG9mIHRoZSBhcmcgaXMgc2V0IHRvIDUuCmN1YmUgPC0gZnVuY3Rpb24oeD01KSB7CiAgcmV0dXJuKHgqeCp4KTsKfQpjYXQoIkNhbGxpbmcgY3ViZSB3aXRoIDIgOiAiLCBjdWJlKDIpLCAiXG4iKSAgICAjIHdpbGwgZ2l2ZSAyXjMKY2F0KCJDYWxsaW5nIGN1YmUgICAgICAgIDogIiwgY3ViZSgpLCAiXG4iKSAgICAgIyB3aWxsIGRlZmF1bHQgdG8gNV4zLgoKIyBMRUFSTiBBQk9VVCBGVU5DVElPTlMgVEhBVCBSRVRVUk4gTVVMVElQTEUgT0JKRUNUUyAtLQpwb3dlcnMgPC0gZnVuY3Rpb24oeCkgewogIHBhcmNlbCA9IGxpc3QoeDI9eCp4LCB4Mz14KngqeCwgeDQ9eCp4KngqeCk7CiAgcmV0dXJuKHBhcmNlbCk7Cn0KClggPSBwb3dlcnMoMyk7CnByaW50KCJTaG93aW5nIHBvd2VycyBvZiAzIC0tIik7IHByaW50KFgpOwoKIyBXUklUSU5HIFRISVMgQ09NUEFDVExZICg0IGxpbmVzIGluc3RlYWQgb2YgNykKCnBvd2VyZnVsIDwtIGZ1bmN0aW9uKHgpIHsKICByZXR1cm4obGlzdCh4Mj14KngsIHgzPXgqeCp4LCB4ND14KngqeCp4KSk7Cn0KcHJpbnQoIlNob3dpbmcgcG93ZXJzIG9mIDMgLS0iKTsgcHJpbnQocG93ZXJmdWwoMykpOwoKIyBJbiBSLCB0aGUgbGFzdCBleHByZXNzaW9uIGluIGEgZnVuY3Rpb24gaXMsIGJ5IGRlZmF1bHQsIHdoYXQgaXMKIyByZXR1cm5lZC4gU28geW91IGNvdWxkIGVxdWFsbHkganVzdCBzYXk6CnBvd2VyZnVsIDwtIGZ1bmN0aW9uKHgpIHtsaXN0KHgyPXgqeCwgeDM9eCp4KngsIHg0PXgqeCp4KngpfQo=