R结合quantmod::getSymbols使用的map(~Ad(get(.)))语法疑问
语法逻辑解释
1. 匿名函数属性确认
~Ad(get(.)) 属于purrr包标准的单侧公式风格匿名函数用法,你之前接触的~ . *2是这类匿名函数的最简形式:其中.是匿名函数的默认参数占位符,可以放在表达式的任意合法位置,不要求必须直接跟在波浪号之后。
2. get(.)的执行逻辑
整段代码的运行顺序可以拆解为:
getSymbols设置auto.assign = TRUE时,不会直接返回行情数据,而是会将每个标的的完整行情数据,以标的代码为变量名存入当前工作环境,函数自身的返回值为你传入的symbols字符向量(例如传入c("AAPL", "MSFT"),返回值就是相同内容的字符向量)- 后续
map遍历的就是这个字符向量,每一轮遍历拿到的单个标的代码字符串,就是匿名函数里的.参数 get(.)的作用就是把当前拿到的字符串(如"AAPL")作为变量名,取出工作环境中对应的行情数据对象- 最后用quantmod内置的
Ad()函数,提取行情数据中的调整后收盘价列
3. 等价写法参考
你可以把这段公式风格的匿名函数展开为传统R匿名函数,逻辑完全一致:
map(symbols, function(x) { Ad(get(x)) })
公式写法里的.就等价于传统匿名函数的入参x,将其放在get()的括号内只是正常的参数传递操作,没有特殊语法变形。
内容的提问来源于stack exchange,提问作者Paul Edam
相关产品推荐
相关产品推荐

