R: 矩阵运算及常用函数 II - aggregate

R语言矩阵运算与aggregate函数深入解析
本文探讨了R语言中的矩阵运算,并重点讲解了aggregate函数的使用,包括分组依据by、统计函数FUN、简化输出simplify、数据处理公式与数据集、缺失值处理na.action等关键参数。此外,还提到了aggregate函数常与xtabs()结合,用于生成频数表,以及nfrequency参数在处理观察值频率中的作用。
aggregate也是跟SAC有关系的一个函数(stats包中):先将对象分解为不同的组别(回忆一下split函数),然后分个处理,最后合并显示。

具体地说,aggregate()函数将数据集 (依据指定方法) 拆分成不同子集,分别计算各自的统计数据,并(组合)返回计算结果。
此函数一般对三种对象做处理:data.frame, formula 和 ts (即时间序列).
参考EXCEL的话,pivot table可以实现同样的效果

-+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+-

1. for class "data.frame": 
     aggregate(x, by, FUN, ..., simplify = TRUE)
     参数
  • by: 分组依据
    • 必须是一组list格式的数据,list中的每个元素都要跟data frame中的observation数量相当;
    • 每个元素可以是外部数据,也可以是x中自身的数据;
    • 其中每个elements都会被转换成factors的格式;
    • 可在参数中直接对这组数据进行命名: by = list(Name1 = data serie1, Name2 = data serie2, ...)
  • FUN: 统计值的计算方法。
  • simplify: 如果为TRUE,返回向量或者矩阵(如果统计结果长度一致),否则返回list。
     example 1.1: 调用R数据库: state.x77; state.region,以state.region为分组规则计算各组的均值
    &
以下是关于解析 knife4j 聚合 Swagger 文档配置代码,包含 gateway 启用、策略及具体路由信息的详细内容。 ### 环境信息 在进行配置前,需要明确相关的环境信息,如 spring-boot 版本为 2.6.3,spring-cloud-alibaba 版本为 2021.0.1.0,knife4j-openapi2-spring-boot-starter 版本为 4.0.0 [^2]。 ### 具体配置步骤及代码示例 #### 1. 新增模块并整合服务 为了展示 knife4j 的聚合效果,至少需要两个模块。新增一个模块后,按照搭建单服务 swagger 的方式再次整合一个服务,同时要在新服务依赖中引入 knife4j-micro 依赖 [^1]。 #### 2. 微服务集成 knife4j - **编写 Knife4jApiInfoProperties**:该类用于配置 Knife4j 的 API 信息,示例代码如下: ```java import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; @Component @ConfigurationProperties(prefix = "knife4j.api-info") public class Knife4jApiInfoProperties { private String title; private String description; private String version; // Getters and Setters public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public String getVersion() { return version; } public void setVersion(String version) { this.version = version; } } ``` - **编写配置类 Knife4jConfig**:用于配置 Knife4j 的相关信息,示例代码如下: ```java import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.service.ApiInfo; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.swagger2.annotations.EnableSwagger2; @Configuration @EnableSwagger2 public class Knife4jConfig { @Bean public Docket api() { return new Docket(DocumentationType.SWAGGER_2) .select() .apis(RequestHandlerSelectors.basePackage("com.example.demo.controller")) .paths(PathSelectors.any()) .build() .apiInfo(apiInfo()); } private ApiInfo apiInfo() { return new ApiInfoBuilder() .title("My API") .description("API description") .version("1.0.0") .build(); } } ``` - **放行相关资源 & 保证启动了 knife4j**:在 Spring Security 配置中放行 knife4j 相关资源,示例代码如下: ```java import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.web.SecurityFilterChain; @Configuration public class SecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/doc.html", "/swagger-resources/**", "/v2/api-docs", "/webjars/**").permitAll() .anyRequest().authenticated() .and() .formLogin() .and() .httpBasic(); return http.build(); } } ``` #### 3. 网关集成 knife4j - **编写配置类 Knife4jGatewayConfig**:用于配置 Spring Cloud Gateway 与 Knife4j 的集成,示例代码如下: ```java import org.springframework.cloud.gateway.route.RouteLocator; import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class Knife4jGatewayConfig { @Bean public RouteLocator customRouteLocator(RouteLocatorBuilder builder) { return builder.routes() .route("service1", r -> r.path("/service1/**") .uri("lb://service1")) .route("service2", r -> r.path("/service2/**") .uri("lb://service2")) .build(); } } ``` 在上述代码中,`service1` 和 `service2` 是具体的微服务名称,`lb://` 表示使用负载均衡。 ### 测试验证 完成上述配置后,可以访问网关的 `http://gateway-url/doc.html` 来查看聚合后的 Swagger 文档。 ### 注意事项 - manual 模式需手动指定每个服务的文档路径,适合服务数量少、需精确控制的场景,且要注意其默认适配 Swagger2(/v2/api-docs)的问题 [^3]。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值