小编Kon*_*rad的帖子

R:带有geom_map的ggplot2返回“ x,并且单位必须长度> 0”错误,尽管值已转换为系数

我正在开发一个原始的闪亮应用程序,该应用程序将映射来自“ 苏格兰开放数据”项目的一些数据。我计算出了SPARQL查询,该查询生成的数据帧类似于下面提供的摘录

dz_label overall.quantiles
S010001 8
S010002 9
Run Code Online (Sandbox Code Playgroud)

我拥有强化的shapefile,并尝试使用以下代码映射它们:

ggplot() + 
      geom_map(data = dta.simd, aes(map_id = dz_label, 
                                    fill = as.factor(dta.simd$overall.quantiles)), 
               map = shps.dzs2001) +
      geom_path(data = shps.dzs2001, aes(x=long, y=lat, group=group), 
                colour="black", size=0.25)
Run Code Online (Sandbox Code Playgroud)

代码返回错误

Error: 'x' and 'units' must have length > 0
Run Code Online (Sandbox Code Playgroud)

如果我理解类似的讨论(12),问题与值的类相关联。但是,我的理解是as.factor()应该解决这个问题,但是显然不是这样。该应用程序的完整代码包含在下面。当然,我将不胜感激。

服务器

# Libs
require(shiny); require(SPARQL); require(ggplot2); require(rgeos); require(maptools);
require(RCurl)

# Server function
shinyServer(function(input, output) {

  # Source the data

  ## Source the SPARQL data
  ### Define endpoint URL. …
Run Code Online (Sandbox Code Playgroud)

r sparql ggplot2 r-maptools shiny

5
推荐指数
1
解决办法
7402
查看次数

在一张图表上放置两个维恩图

使用VennDiagram包,我通过以下方式生成两个图形:

# First graph
VennDiagram::draw.pairwise.venn(
    area1 = 100,
    area2 = 70,
    cross.area = 30,
    category = c("A1", "B1"),
    fill = c("#00204DFF", "#FFEA46FF")
) -> vg1

# Second graph
VennDiagram::draw.pairwise.venn(
    area1 = 120,
    area2 = 80,
    cross.area = 10,
    category = c("A2", "B2"),
    fill = c("#000004FF", "#FCFFA4FF")
) -> vg2
Run Code Online (Sandbox Code Playgroud)

通过调用时grid::grid.draw(vg1)grid::grid.draw(vg2)图表按预期显示:

grid::grid.draw(vg1) vg1

grid::grid.draw(vg2) vg2

我如何创建一个将两个图都放在另一个图下的网格对象?

尝试

grdFrme <- grid::grid.frame(name = "gf")
grid::grid.pack("gf", vg1)
Run Code Online (Sandbox Code Playgroud)

packGrob(grid.get(gPath),grob,side,row,row.before,row.after中的错误:无效的'grob'

所需结果

两个图

charts r venn-diagram r-grid

5
推荐指数
1
解决办法
344
查看次数

R中的一行if语句 - 第一个参数无效

我在R中编写简单的代码,我正在检查工作目录中是否存在给定文件,如果不存在,我将使用数据下载zip文件并在R中解压缩.如果文件存在,则对应于二进制(getBinaryURL)的R对象和与文件的连接已连接.我想在成功下载后删除它们.我起草了一句if语句,但它们返回错误存在错误(bin):第一个参数无效.对我来说中间显而易见的是语法有什么问题.

if (exists(bin)) rm(bin)
if (exists(con)) rm(con)
if (exists(dataurl)) rm(dataurl)
Run Code Online (Sandbox Code Playgroud)

if-statement r rm exists object

4
推荐指数
1
解决办法
7371
查看次数

R:在一个命令中将getSymbols()的输出转换为数据帧,而不显式调用对象名

我想,以输出转换从getSymbolsquantmod包到一个数据帧.目前,我使用以下代码实现了这一点.

Data <- new.env()
getSymbols(Symbols = "EUR/USD", src = "oanda", from = "2005-01-01", 
    to = "2006-01-01", env = Data)
test <- as.data.frame(Data$EURUSD)
head(test)
Run Code Online (Sandbox Code Playgroud)

理想情况下,我想将这些代码简化为以下内容:

test <- as.data.frame(getSymbols(Symbols = "EUR/USD", 
   src = "oanda", from = "2005-01-01", to = "2006-01-01"))
Run Code Online (Sandbox Code Playgroud)

但这并不适用:

> head(test)
  getSymbols(Symbols = "EUR/USD", src = "oanda", from = "2005-01-01", to = "2006-01-01")
1                                                                                 EURUSD
Run Code Online (Sandbox Code Playgroud)

理想情况下,我希望EUR/USD在处理数据时避免引用该对,因为将来我将努力使这个组件动态,因此必须输入test <- as.data.frame(Data$EURUSD)破坏乐趣.我理想的代码就是这样的:

test <- as.data.frame(getSymbols(Symbols = *user input*, 
   src = "oanda", from = "2005-01-01", to = …
Run Code Online (Sandbox Code Playgroud)

r dataframe zoo xts quantmod

4
推荐指数
1
解决办法
5112
查看次数

访问函数的父环境并移除对象

假设我想编写一个简单的重命名函数,它可以通过.Rprofile. 该函数很简单,可以比较为:

carsNewName <- mtcars; rm(mtcars)
Run Code Online (Sandbox Code Playgroud)

.Rprofile

可用的函数.Rprofile格式为:

.env$rename <- function(oldName, newName) {
    newName <- oldName
    rm(oldName, envir = parent.env())
    return(newName)
}
Run Code Online (Sandbox Code Playgroud)

在哪里。env通过attach(.env).

如何通过 访问函数的父环境parent.env()即,如果rename在另一个函数内部调用函数,我想重命名不在全局环境中的对象。

r function scoping rprofile

4
推荐指数
1
解决办法
3654
查看次数

获取作为参数传递给函数的函数名称

背景

函数作为参数传递给函数。问题涉及:

  • 获取该函数的名称作为字符串以方便后续操作
  • 在调用的包中找到该函数
  • 理解:::::呼唤

例子

函数在 x 上fun_tst执行函数FUN

fun_tst <- function(x = 1:100, FUN = mean) {
    return(FUN(x))
}
Run Code Online (Sandbox Code Playgroud)

mean

fun_tst()
# [1] 50.5
Run Code Online (Sandbox Code Playgroud)

sum

fun_tst(x = 1:1e3, FUN = sum)
# [1] 500500
Run Code Online (Sandbox Code Playgroud)

问题

fun_tst <- function(x = 1:100, FUN = mean) {
    msg <- paste("Executing function", FUN)
    print(msg)
    return(FUN(x))
} 


fun_tst(x = 1:1e3, FUN = sum)
Run Code Online (Sandbox Code Playgroud)

粘贴错误(“执行函数”,FUN):无法将“内置”类型强制为“字符”类型的向量


尝试

1)

有趣的是,print可以处理FUN对象但结果返回函数体。

fun_tst <- function(x = 1:100, …
Run Code Online (Sandbox Code Playgroud)

functional-programming namespaces r function substitution

4
推荐指数
1
解决办法
1729
查看次数

仅在单击菜单项时加载闪亮的模块

背景

在模块化1 Shiny 应用程序中,我想仅在单击上的菜单项时加载模块。如果未访问菜单项,我不想加载模块。

基本应用

app.R

# Libs
library(shiny)
library(shinydashboard)

# Source module
source("sample_module.R")

ui <- dashboardPage(
    dashboardHeader(title = "Dynamic sidebar"),
    dashboardSidebar(sidebarMenuOutput("menu")),
    dashboardBody(tabItems(
        tabItem(tabName = "tab_one", h1("Tab One")),
        tabItem(tabName = "tab_two", sampleModuleUI("sampleModule"))
    ))
)

server <- function(input, output) {

    callModule(sampleModuleServer, "sampleModule")

    output$menu <- renderMenu({
        sidebarMenu(
            menuItem(
                "Menu item 1",
                icon = icon("calendar"),
                tabName = "tab_one"
            ),
            menuItem(
                "Menu item 2",
                icon = icon("globe"),
                tabName = "tab_two"
            )
        )
    })
}

shinyApp(ui, server)
Run Code Online (Sandbox Code Playgroud)

sample_module.R

sampleModuleServer <- function(input, output, …
Run Code Online (Sandbox Code Playgroud)

r shiny shinydashboard shiny-reactivity

4
推荐指数
1
解决办法
1717
查看次数

如何将过滤器表达式存储为字符串?

为了分析物种数据库,我经常需要更改许多标准,具体取决于项目范围等。

由于总是更改主脚本本身内的标准非常不方便,因此我开始将各种参数定义为文件中的变量,这些参数exterior parameters.R将被复制到项目特定的文件夹并在那里进行调整,并且这些参数将从文件中获取main.R

这很好用,但是现在我开始过滤表达式,我找不到将它们作为字符串存储在参数文件中的方法。

标准过滤器表达式将是这样的:

 rlb == "1" | rlb == "2" | rlb== "3" | rlb == "G" | rlb == "R" | rld ==
 "1" | rld == "2" | rld== "3" | rld == "G" | rld == "R" | ffh2 > 1 | ffh4
 == 1 | ffh5 == 1 | spa1 == 1 | sap == 1
Run Code Online (Sandbox Code Playgroud)

由于""某些参数,我无法将其分配为字符串变量,因为 R 抱怨存在未知的标记或对象。

如何将此过滤表达式分配给变量,以便稍后可以使用它(例如与eval(my_filter_variable)etc 一起使用)来执行过滤?

string parameters r filter

4
推荐指数
1
解决办法
734
查看次数

通过传递带有列名的有序向量来动态排序dplyr中的列以进行选择

我正在使用下面的代码生成一个简单的汇总表:

# Data
data("mtcars")
# Lib
require(dplyr)
# Summary
mt_sum <- mtcars %>%
  group_by(am) %>%
  summarise_each(funs(min, mean, median, max), mpg, cyl) %>%
  mutate(am = as.character(am)) %>%
  left_join(y = as.data.frame(table(mtcars$am),
                              stringsAsFactors = FALSE),
            by = c("am" = "Var1")) 
Run Code Online (Sandbox Code Playgroud)

代码产生了预期的结果:

> head(mt_sum)
Source: local data frame [2 x 10]

     am mpg_min cyl_min mpg_mean cyl_mean mpg_median cyl_median mpg_max cyl_max  Freq
  (chr)   (dbl)   (dbl)    (dbl)    (dbl)      (dbl)      (dbl)   (dbl)   (dbl) (int)
1     0    10.4       4 17.14737 6.947368       17.3          8    24.4       8    19
2     1 …
Run Code Online (Sandbox Code Playgroud)

sorting r dataframe dplyr

3
推荐指数
2
解决办法
1243
查看次数

使用 dplyr 将列名作为参数传递给函数

我有一个如下所示的数据框:

transid<-c(1,2,3,4,5,6,7,8)
accountid<-c(a,a,b,a,b,b,a,b)
month<-c(1,1,1,2,2,3,3,3)
amount<-c(10,20,30,40,50,60,70,80)
transactions<-data.frame(transid,accountid,month,amount)
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用 dplyr 包动词为每个 accountid 编写每月总金额的函数。

my_sum<-function(df,col1,col2,col3){
df %>% group_by_(col1,col2) %>%summarise_(total_sum = sum(col3))
}

my_sum(transactions, "accountid","month","amount")
Run Code Online (Sandbox Code Playgroud)

得到如下结果:

accountid   month  total_sum
a            1       30
a            2       40
a            3       70
b            1       30
b            2       50
b            3       140
Run Code Online (Sandbox Code Playgroud)

我收到如下错误:- sum(col3) 中的错误:参数的“类型”(字符)无效。如何在汇总函数中将列名作为参数传递而没有引号?

r dataframe dplyr quosure

3
推荐指数
1
解决办法
2903
查看次数