小编Gre*_*gor的帖子

如何在R中正确使用列表?

简要背景:广泛使用的许多(大多数?)当代编程语言至少有一些共同的ADT [抽象数据类型],特别是

  • string(由字符组成的序列)

  • list(有序的值集合),和

  • 基于地图的类型(将键映射到值的无序数组)

在R编程语言中,前两个分别实现为charactervector.

当我开始学习R时,几乎从一开始就有两件事是显而易见的:list是R中最重要的数据类型(因为它是R的父类data.frame),其次,我无法理解它们是如何工作的,至少不能很好地在我的代码中正确使用它们.

首先,在我看来,R的list数据类型是地图ADT的简单实现(dictionary在Python中,NSMutableDictionary在Objective C中,hash在Perl和Ruby中,object literal在Javascript中,等等).

例如,您可以像创建Python字典一样创建它们,方法是将键值对传递给构造函数(在Python中dict不是这样list):

x = list("ev1"=10, "ev2"=15, "rv"="Group 1")
Run Code Online (Sandbox Code Playgroud)

并且您可以像访问Python字典那样访问R List的项目,例如x['ev1'].同样,您可以通过以下方式仅检索"键"或仅检索"值":

names(x)    # fetch just the 'keys' of an R list
# [1] "ev1" "ev2" "rv"

unlist(x)   # fetch just the 'values' of an R list
#   ev1       ev2        rv 
# …
Run Code Online (Sandbox Code Playgroud)

language-features r list abstract-data-type data-structures

308
推荐指数
9
解决办法
20万
查看次数

格式化R中的小数位数

我有一个数字,例如1.128347132904321674821,我想在输出到屏幕(或写入文件)时只显示两位小数.怎么做到这一点?

x <- 1.128347132904321674821
Run Code Online (Sandbox Code Playgroud)

编辑:

指某东西的用途:

options(digits=2)
Run Code Online (Sandbox Code Playgroud)

已被建议作为可能的答案.有没有办法在脚本中指定一次性使用?当我将它添加到我的脚本时,它似乎没有做任何不同的事情,我对很多重新键入格式化每个数字感兴趣(我正在自动化一个非常大的报告).

-

答案:round(x,digits = 2)

formatting r rounding r-faq

238
推荐指数
8
解决办法
47万
查看次数

计算移动平均线

我正在尝试使用R来计算矩阵中一系列值的移动平均值.正常的R邮件列表搜索虽然不是很有帮助.R中似乎没有内置函数可以让我计算移动平均线.有任何套餐提供吗?或者我需要自己写吗?

r moving-average r-faq

175
推荐指数
10
解决办法
22万
查看次数

R内存管理/不能分配大小为n Mb的向量

我遇到了试图在R中使用大对象的问题.例如:

> memory.limit(4000)
> a = matrix(NA, 1500000, 60)
> a = matrix(NA, 2500000, 60)
> a = matrix(NA, 3500000, 60)
Error: cannot allocate vector of size 801.1 Mb
> a = matrix(NA, 2500000, 60)
Error: cannot allocate vector of size 572.2 Mb # Can't go smaller anymore
> rm(list=ls(all=TRUE))
> a = matrix(NA, 3500000, 60) # Now it works
> b = matrix(NA, 3500000, 60)
Error: cannot allocate vector of size 801.1 Mb # But that is all there …
Run Code Online (Sandbox Code Playgroud)

memory-management r vector matrix r-faq

131
推荐指数
7
解决办法
38万
查看次数

dplyr - mutate:使用动态变量名

我想使用dplyr dplyr::mutate()在数据框中创建多个新列.应动态生成列名称及其内容.

来自虹膜的示例数据:

library(dplyr)
iris <- tbl_df(iris)
Run Code Online (Sandbox Code Playgroud)

我已经创建了一个函数来改变Petal.Width变量中的新列:

multipetal <- function(df, n) {
    varname <- paste("petal", n , sep=".")
    df <- mutate(df, varname = Petal.Width * n)  ## problem arises here
    df
}
Run Code Online (Sandbox Code Playgroud)

现在我创建一个循环来构建我的列:

for(i in 2:5) {
    iris <- multipetal(df=iris, n=i)
}
Run Code Online (Sandbox Code Playgroud)

但是,由于mutate认为varname是一个文字变量名,因此循环只创建一个新变量(称为varname)而不是四个(称为petal.2 - petal.5).

如何将mutate()动态名称用作变量名?

r r-faq dplyr

131
推荐指数
6
解决办法
9万
查看次数

警告信息:在`...`:无效因子级别,NA生成

我不明白为什么我收到这条警告信息.

> fixed <- data.frame("Type" = character(3), "Amount" = numeric(3))
> fixed[1, ] <- c("lunch", 100)
Warning message:
In `[<-.factor`(`*tmp*`, iseq, value = "lunch") :
  invalid factor level, NA generated
> fixed
  Type Amount
1 <NA>    100
2           0
3           0
Run Code Online (Sandbox Code Playgroud)

warnings r r-faq

128
推荐指数
4
解决办法
22万
查看次数

当一些数字包含逗号作为千位分隔符时如何读取数据?

我有一个csv文件,其中一些数值表示为字符串,逗号为千分隔符,例如,"1,513"而不是1513.将数据读入R的最简单方法是什么?

我可以使用read.csv(..., colClasses="character"),但是在将这些列转换为数字之前,我必须从相关元素中删除逗号,我找不到一个巧妙的方法来做到这一点.

csv r r-faq

114
推荐指数
8
解决办法
11万
查看次数

为什么R的ifelse语句不能返回向量?

我发现R的ifelse陈述不时很方便.例如:

ifelse(TRUE,1,2)
# [1] 1
ifelse(FALSE,1,2)
# [1] 2
Run Code Online (Sandbox Code Playgroud)

但是我对以下行为感到困惑.

ifelse(TRUE,c(1,2),c(3,4))
# [1] 1
ifelse(FALSE,c(1,2),c(3,4))
# [1] 3
Run Code Online (Sandbox Code Playgroud)

这是一个超出我的薪资水平的设计选择吗?

if-statement r r-faq

105
推荐指数
5
解决办法
3万
查看次数

R>%>%函数的含义是什么?

我已经看到在dplyrrvest%>%等一些软件包中使用(百分比大于百分比)函数.这是什么意思?这是在R中编写闭包块的方法吗?

syntax r r-faq dplyr magrittr

88
推荐指数
3
解决办法
20万
查看次数

将密度曲线拟合到R中的直方图

R中是否有适合直方图曲线的函数?

假设您有以下直方图

hist(c(rep(65, times=5), rep(25, times=5), rep(35, times=10), rep(45, times=4)))
Run Code Online (Sandbox Code Playgroud)

它看起来很正常,但它是偏斜的.我想要拟合一条倾斜的正常曲线来包裹这个直方图.

这个问题相当基本,但我似乎无法在互联网上找到R的答案.

r histogram curve-fitting r-faq

85
推荐指数
4
解决办法
24万
查看次数