R 返回列表而不是填充数据框列

标签 r apply

我正在尝试使用 apply() 填充数据框中的附加列,并调用我为数据框的每一行创建的函数。

数据框称为 Hit.Data,有 2 列 Zip.CodeHits。这里有几行

Zip.Code , Hits
97222    , 20
10100    , 35
87700    , 23

应用代码如下:

Hit.Data$Zone = apply(Hit.Data, 1, function(x) lookupZone("89000", x["Zip.Code"]))

lookupZone() 函数如下:

lookupZone <- function(sourceZip, destZip){
  sourceKey = substr(sourceZip, 1, 3)
  destKey = substr(destZips, 1, 3)
  return(zipToZipZoneMap[[sourceKey]][[destKey]])
}

lookupZone() 函数所做的就是获取 2 个字符串,截断为所需的字符并查找值。当我运行此代码时,会发生什么情况:R 向 Hit.Data$Zone 分配一个列表,而不是逐行填充数据。

> typeof(Hit.Data$Zone)
[1] "list

令我困惑的是,当我使用 apply 并告诉它在其中输入一个数字时,它就能正常工作:

> Hit.Data$Zone = apply(Hit.Data, 1, function(x) 2)
> typeof(Hit.Data$Zone)
[1] "double"

我知道 R 在降低矩阵维数和用列表做奇怪的事情方面有很多奇怪的行为,但这看起来应该非常简单。我缺少什么?我觉得 R 有一些基本的东西是我正在奋斗的,而且到目前为止它正在获胜。

最佳答案

您的问题是您偶尔会在 HashMap 中查找不存在的条目,这会导致哈希默默返回 NULL。考虑:

> hash("890", hash("972"=3, "101"=3, "877"=3))[["890"]][["101"]]
[1] 3
> hash("890", hash("972"=3, "101"=3, "877"=3))[["890"]][["100"]]
NULL

如果apply遇到任何NULL值,那么它不能将结果强制转换为向量,因此它将返回一个列表。 sapply 也会发生同样的情况。

您必须确保数据中前三个邮政编码数字的所有可能组合都存在于哈希中,或者您需要代码中的逻辑来返回 NA 而不是 NULL 查找缺失的条目。

关于R 返回列表而不是填充数据框列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21685741/

相关文章:

dataframe - Julia:将函数应用于 DataFrame 中的每个单元格(不丢失列名)

r - 在正在运行的 docker 容器上一一执行多个 R 命令

r - 根据 dplyr 中的列保留组之间的不同行

jupyter 中的 r 图形 - 无法启动 png() 设备

r - PostgreSQL + dplyr : loading bigint as a text column

r - 如何从不同(戴安娜,簇R包)输出中获得最佳簇数?

r - 按顺序对数据框中的一系列行应用匹配和替换函数

python - 使用 pandas apply 和用户定义的函数返回多列

r - R中的条件if语句

R:为多个不同变化的参数评估函数