R / Plotly:list2env(数据)中的错误:第一个参数必须是命名列表

时间:2016-04-29 22:15:43

标签: r function plot plotly

我在使用R方面经验丰富,但我刚开始学习编写功能来自动执行任务。我目前正在开展一个项目来运行情绪分析和剩下的五位总统候选人的演讲主题模型,并且遇到了障碍。

我写了function来逐句分析正面和负面的情绪,给每个句子一个分数。奇迹般地,它起作用并给了我一个数据框,每个句子都有分数。

    score        text
1     1        iowa, thank you.
2     2        thanks to all of you here tonight for your patriotism, for your love of country and for doing what too few americans today are doing.  
3     0        you are not standing on the sidelines complaining. 
4     1        you are not turning your backs on the political process.
5     2        you are standing up and fighting back.

所以我现在要做的就是创建一个function来获取分数并计算出每个分数的总数代表百分比,然后使用{{1 }}。所以这是我写的函数:

plotly

返回此内容:

scoreFun <- function(x){{
  tbl <- table(x)
  res <- cbind(tbl,round(prop.table(tbl)*100,2))
  colnames(res) <- c('Score', 'Count','Percentage')
  return(res)
}
  percent = data.frame(Score=rownames, Count=Count, Percentage=Percentage)
  return(percent)
}

我希望它会返回的是一个数据框,最后是saPct <- scoreFun(sanders.scores$score) saPct Count Percentage -6 1 0.44 -5 1 0.44 -4 6 2.64 -3 13 5.73 -2 20 8.81 -1 42 18.50 0 72 31.72 1 34 14.98 2 18 7.93 3 9 3.96 4 6 2.64 5 2 0.88 6 1 0.44 9 1 0.44 11 1 0.44 作为名为rownames的变量,接下来的两列名为Score和{{1} }, 分别。然后我想使用以下代码在x轴上绘制Count并在y轴上绘制Percentage

Score

我很确定我在Percentage和我的d <- subplot( plot_ly(clPct, x = rownames, y=Percentage, xaxis="x1", yaxis="y1"), plot_ly(saPct, x = rownames, y=Percentage, xaxis="x2", yaxis="y2"), margin = 0.05, nrows=2 ) %>% layout(d, xaxis=list(title="", range=c(-15, 15)), xaxis2=list(title="Score", range=c(-15,15)), yaxis=list(title="Clinton", range=c(0,50)), yaxis2=list(title="Sanders", range=c(0,50)),showlegend = FALSE) d 代码中犯了一些明显的错误,因为很明显它没有返回我想要的数据帧,而且是当我运行`plotly代码时导致错误function。尽管如此,我还没有非常有经验的写作功能,而且我在谷歌时也没有找到类似的问题,所以我不知道如何解决这个问题。

任何建议都会受到欢迎。谢谢!

1 个答案:

答案 0 :(得分:0)

@MLavoie,我在评论中提到的问题的代码就是这个伎俩。非常感谢!

scoreFun <- function(x){
  tbl <- data.frame(table(x))
  colnames(tbl) <- c("Score", "Count")
  tbl$Percentage <- tbl$Count / sum(tbl$Count) * 100
  return(tbl)
}