首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何调试R中无效下标类型“integer”错误

如何调试R中无效下标类型“integer”错误
EN

Stack Overflow用户
提问于 2014-02-06 17:07:53
回答 2查看 9.4K关注 0票数 7

我尝试在R: extract maximum value in vector under certain conditions中运行代码,但一直收到错误

代码语言:javascript
复制
Error in list(id.2 = c(3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,  : 
  invalid subscript type 'integer'

代码如下:

代码语言:javascript
复制
require(dplyr)
dat <- read.table(header = TRUE, text = "id    name    year    job    job2 cumu_job2
1   Jane    1980    Worker  0   0
1   Jane    1981    Manager 1   1
1   Jane    1982    Sales   0   0
1   Jane    1983    Sales   0   0
1   Jane    1984    Manager 1   1
1   Jane    1985    Manager 1   2
1   Jane    1986    Boss    0   0
2   Bob     1985    Worker  0   0
2   Bob     1986    Sales   0   0
2   Bob     1987    Manager 1   1
2   Bob     1988    Manager 1   2
2   Bob     1989    Boss    0   0
3   Jill    1989    Worker  0   0
3   Jill    1990    Boss    0   0")

dat %.%
  group_by(id) %.%
  mutate(
    all_jobs = sum(unique(job) %in% c("Sales","Manager","Boss")),
    cumu_max = max(cumu_job2)
  ) %.%
  filter(all_jobs == 3, job %in% c("Sales","Boss"))

Source: local data frame [5 x 8]
Groups: id

  id name year   job job2 cumu_job2 all_jobs cumu_max
1  1 Jane 1982 Sales    0         0        3        2
2  1 Jane 1983 Sales    0         0        3        2
3  1 Jane 1986  Boss    0         0        3        2
4  2  Bob 1986 Sales    0         0        3        2
5  2  Bob 1989  Boss    0         0        3        2
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-05 22:48:18

示例代码也适用于我。但我发现,如果我尝试这样做,我可以重现类似的错误:

代码语言:javascript
复制
dat %.%
 group_by(dat$id) %.%
 mutate(
     all_jobs = sum(unique(job) %in% c("Sales","Manager","Boss")),
     cumu_max = max(cumu_job2)
 ) %.%
 filter(all_jobs == 3, job %in% c("Sales","Boss"))

也就是说,如果我输入"group_by(dat$id)“而不是"group_by(id)”

票数 10
EN

Stack Overflow用户

发布于 2016-02-17 17:37:32

错误

示例代码也适用于我。但是,正如schnee提到的,您可以通过将group_by(id)替换为group_by(dat$id)来创建类似的错误。可重现代码:

代码语言:javascript
复制
dat1 <- data.frame(x=c('A','A','B','B'), y=c('A','B','C','D'), val = 1:4)
dat2 <- data.frame(val = 1:4)
dat_group <- data.frame(x=c('A','A','B','B'))

# invalid subscript type 'integer'
dat1 %>%
  group_by(dat1$x) %>%
  mutate(y = sum(unique(y) %in% c("A","B","C")))

# invalid subscript type 'list'
dat2 %>%
  group_by(dat_group$x) %>%
  mutate(y = sum(unique(y) %in% c("A","B","C")))

虽然第一个通常只是一个拼写错误(您可以用x替换dat$ x ),但第二个可能是一个有效的用例(尽管我建议使用join使其更简洁)。

解决方案

dplyr包不喜欢“$”的用法。尝试使用'[',例如:

代码语言:javascript
复制
dat1[,'x']

引用变量也是有效的:

代码语言:javascript
复制
dat1$'x'

完整代码:

代码语言:javascript
复制
dat1 %>%
  group_by(dat1[,'x']) %>%
  mutate(y = sum(unique(y) %in% c("A","B","C")))

dat1 %>%
  group_by(dat1$'x') %>%
  mutate(y = sum(unique(y) %in% c("A","B","C")))

另请参阅https://github.com/hadley/dplyr/issues/433https://github.com/hadley/dplyr/issues/1554

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21598295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档