这是我的代码:
>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
是我代码中的循环变量。
非常感谢您的回复!
答案 0 :(得分:1)
而不是as.name
,您应该使用get
:
length(get(paste0("all_data_align_",year)))
您需要检索对象而不仅仅是名称。