我想使用alist在R中创建一个未评估函数的列表。我想要一个" myList"可以通过以下方式生成:
xlist = c("A", "B", "C", ..., "Z")
myList = alist(print(xlist[1]), print(xlist[2]), print(xlist[3]), ..., print(xlist[26]))
但是,只有当xlist很短时才能实现上述目的。如何使用一些聪明的函数生成myList?我尝试了一下。
tempfun = function(x) alist(print(x))
myList = sapply(xlist, tempfun)
但myList的结果只包含第i个条目中的print(x),而不是print(xlist [i])。
答案 0 :(得分:0)
我在理解这个请求时遇到了很多麻烦。函数名称不会被引用。制作功能列表非常简单:
funclist <- c(mean, sd, median)
X <- exp(1:10)
funclist[1](X) # you might think that this was a vector, but NOT.
Error: attempt to apply non-function
funclist[[1]]( X ) # Note that funclist[[1]] _is_ a function so "works" with an open-paren
[1] 3484.377
对这个小问题的解释是语言元素(其中函数只是一个例子)服从列表处理语义,因此c(mean, sd, median)
与list(mean, sd, median)
没有什么不同。
如果你真的开始使用“几乎真实”的函数名称,即对应于实际(未引用的)R的字符值 - name
,那么只需使用get
通过渗透膜分离该值语言和数据对象
> a <- c("mean", "median", "sd")
> get(a[2])
function (x, na.rm = FALSE)
UseMethod("median")
<bytecode: 0x7fb26bb76708>
<environment: namespace:stats>
我确实承认,“引用”这两个术语以及quote
函数周围的结果语义在仔细检查时会让人感到困惑。请注意,函数的“名称”实际上并没有被双侧双引号所包围,除非有人通过hadley-space。