如何在r中直观地识别返回的数据类型是vector还是list?

如何在r中直观地识别返回的数据类型是vector还是list?,r,list,dataframe,vector,tidyverse,R,List,Dataframe,Vector,Tidyverse,我正在尝试学习R,可能由于返回不同的数据类型而面临一些挑战,这些数据类型似乎与数据帧或TIBLE相同,但可能具有不同的数据类型列,如向量或列表(下面解释了数据转换示例) (UPDATE:简而言之,spread()%%>%mutate()可以工作,但是select()%%>%mutate()的工作方式不同,这意味着spread()和select()返回不同的数据类型。下面用示例说明所有这些) library(gapminder)当成形为更宽的格式时,数据在减去年份值时不会出现问题内部发生变化,如下

我正在尝试学习R,可能由于返回不同的数据类型而面临一些挑战,这些数据类型似乎与
数据帧
TIBLE
相同,但可能具有不同的数据类型列,如
向量或列表
(下面解释了数据转换示例)

UPDATE:简而言之,
spread()%%>%mutate()
可以工作,但是
select()%%>%mutate()
的工作方式不同,这意味着
spread()
select()
返回不同的数据类型。下面用示例说明所有这些)

library(gapminder)
成形为更宽的格式时,数据在减去年份值时不会出现问题内部
发生变化
,如下所示:

Case1 df:
库(gapminder)
(在本例中有效)

错误:
gapminder\u new
df:

gapminder_new %>%  
  select(country, "2010", "2019") %>% 
  mutate(gap = "2019" - "2010") %>% head() 

Error: Problem with `mutate()` input `gap`. x non-numeric argument to binary operator i Input `gap` is `"2019" - "2010"`. Run `rlang::last_error()` to see where the error occurred.
要修复上述错误,我必须使用:

mutate(差距=[[2019年]]-[2010年]])

为什么两种情况下的列减法不能用相同的方法进行?

那么,如果返回的不同数据类型的
向量
列表
通常是问题的原因,如何使返回的不同数据类型看起来不同或放置
识别标签

single
dbl
似乎没有
vector
那么有用,
list
可以解决我的问题**

注意:我可能错误地将其识别为数据类型问题,或者正确地解释了我所面临的挑战,因为我是R的新手,所以请原谅

原始问题在下面的链接中提出


你已经猜到了。这不是数据类型问题。问题是
2019
2020
对于变量来说没有语法上有效的名称(请参见关于什么是语法上有效的名称的示例
?make.names
)。要使用这些变量,您必须像在第一个代码示例中那样,将名称放在“``”倒勾中。在这些变量周围加引号会起作用,例如在
select
中,但如果您想在
mutate
中进行计算,则将不起作用,并将导致二进制运算符的
非数值参数出错,例如
“2019”
只是一个字符串。@stefan但当我使用
库时(gapminder)
data and spread()即使我把几年作为列名,然后我对它进行变异,但它在这种情况下仍然有效
{r}gapminder%%>%filter(year==1967 | year==2007)%%>%select(country,year,lifeExp)%%>%spread(year,lifeExp)%%>%head()
这也会创建数字列名:1967和2007,它不会停止对新列进行变异。如果在选择后它不工作,那么这真的是一件奇怪的事情。这是我在R中经历的奇怪的事情,我在学习pythonYep时没有面对过。在这两种情况下,变量都是数字。错误“非数值”与变量的数据类型无关。但在第一个使用原始gapminder数据集的示例中,您将1967年和2007年放在了背景标记中。这就是为什么mutate在这种情况下工作,也就是说,它知道这些是变量名。在使用新gapminder数据集的第二个示例中,您将2010年和2019年放在引号“”中。这就是为什么mutate不起作用,也就是说,它不理解这些是变量名。相反,它认为你想从不起作用的字符串“2019”中减去字符串“2010”。是的,现在它有了意义:
select
不接受数字名称,我不得不引用它,然后字符串上的数字操作就没有发生。我想我将来也必须小心选择的行为,以及它如何对总结函数产生影响。非常感谢你解释得这么好,真的帮助了很多人理解:)
gapminder_new %>%  
  select(country, "2010", "2019") %>%  head()

############## output ################
country 2010  2019
<chr>  <dbl>  <dbl>

Afghanistan 543 571     
Albania 4090    5210        
Algeria 4480    4710        
Andorra 40900   45900       
Angola  3590    3100        
Antigua and Barbuda 13000   15700   
 
gapminder_new %>%  
  select(country, "2010", "2019") %>% 
  mutate(gap = "2019" - "2010") %>% head() 

Error: Problem with `mutate()` input `gap`. x non-numeric argument to binary operator i Input `gap` is `"2019" - "2010"`. Run `rlang::last_error()` to see where the error occurred.