运行widyr包cast_dual函数报错:找不到该函数的求助
解决widyr包中
cast_dual函数找不到的问题 嘿,我来帮你搞定这个问题!你遇到的could not find function "cast_dual"错误,核心原因是**cast_dual这个函数在widyr包的新版本里已经被移除了**——你参考的教程是基于旧版widyr编写的,随着包的迭代更新,官方已经重构了API,不再维护这个旧函数啦。
替代方案:实现相同需求的两种方法
你原本的代码是想把gapminder数据按country和year作为双维度索引,将lifeExp转换为宽格式(或者构建一个国家-年份对应预期寿命的矩阵),现在可以用以下两种方式实现:
方法1:用tidyr的pivot_wider(推荐,贴合tidyverse生态)
tidyr是tidyverse的核心工具包,pivot_wider可以轻松实现和旧版cast_dual一致的宽格式转换效果:
library(pacman) p_load(gapminder, tidyverse, widyr) # 转换为宽格式,行是国家,列是年份,值为对应预期寿命 gapminder_wide <- gapminder %>% pivot_wider(names_from = year, values_from = lifeExp)
方法2:构建稀疏矩阵(如果需要旧版sparse = TRUE的效果)
如果你原本需要的是稀疏矩阵格式,可以用Matrix包直接构建:
library(Matrix) # 创建国家-年份的稀疏矩阵 gapminder_sparse <- sparseMatrix( i = as.integer(factor(gapminder$country)), j = as.integer(factor(gapminder$year)), x = gapminder$lifeExp, dimnames = list(levels(factor(gapminder$country)), levels(factor(gapminder$year))) )
(可选)安装旧版widyr使用cast_dual
如果你一定要用原教程里的cast_dual函数,可以安装包含该函数的旧版本widyr,但不推荐这么做——旧版本可能存在未修复的bug,且不会再收到更新:
# 先查看当前widyr版本 packageVersion("widyr") # 安装旧版本(需要先安装devtools) install.packages("devtools") devtools::install_version("widyr", version = "0.1.3")
内容的提问来源于stack exchange,提问作者ogorodriguez
相关产品推荐
相关产品推荐

