`do.call()`一个函数和直接调用R中的函数之间的区别?

时间:2014-03-24 12:37:08

标签: r do.call

这是我的代码:

>ipo_num_year<- do.call(length,list(as.name(paste0("all_data_align_",year))))
>ipo_num_year
>90
>ipo_num_year<- length(as.name(paste0("all_data_align_",year)))
>ipo_num_year
>1

year是一个字符串对象“1999”;

在之前的代码中,all_data_align_1999已被指定为包含90元素的列表,因此正确的结果为ipo_num_year等于90。但第二行为ipo_num_year {1}}等于1,表示length()函数将as.name()的返回值视为symbol对象,因此其长度仅为1

为什么as.name()的返回值不能直接用作函数length()的参数? 为什么第一个解决方案工作正常?

有人可能会问你为什么不使用length(all_data_align_1999)。这是因为year是我代码中的循环变量。

非常感谢您的回复!

1 个答案:

答案 0 :(得分:1)

而不是as.name,您应该使用get

length(get(paste0("all_data_align_",year)))

您需要检索对象而不仅仅是名称。