Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
'do.call()`是函数还是直接在R中调用函数?_R_Do.call - Fatal编程技术网

'do.call()`是函数还是直接在R中调用函数?

'do.call()`是函数还是直接在R中调用函数?,r,do.call,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 >首次公开募股数量年首次公开募股数量年 >90 >首次公开募股数量年首次公开募股

这是我的密码:

>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
>首次公开募股数量年首次公开募股数量年
>90
>首次公开募股数量年首次公开募股数量年
>1
year
是字符串对象“1999”

在前面的代码中,
所有的数据对齐\u 1999
被分配为一个包含
90
元素的列表,因此正确的结果是
ipo\u num\u year
等于
90
。但是第二行使
ipo\u year
等于
1
,这意味着
length()
函数将
的返回值看作.name()
作为
符号
对象,因此其长度仅为
1

为什么
as.name()
的返回值不能直接用作函数
length()
的参数? 为什么第一种解决方案效果很好

有人可能会问,为什么不直接使用
length(all\u data\u align\u 1999)
。这是因为
年份在我的代码中是一个循环变量


非常感谢您的友好回复

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

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

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

谢谢您的回答,这是因为list()在第一个解决方案中尝试将对象作为其元素时会检索对象吗?
do.call
函数计算参数,因此它对列表的每个元素使用一种
get
函数,因此,在调用
length
函数之前,将名称替换为其值。为了避免评估,您应该使用
quote=TRUE
参数!回答得好!谢谢你的帮助!为什么您的工作区中有一堆
所有数据\u align.*
变量?把它们都列在一个列表中,一切都会变得简单。谢谢你的建议@Roland。我正准备照你说的做。