gpt4 book ai didi

r - 基本的 R 函数

转载 作者:行者123 更新时间:2023-12-02 10:35:17 26 4
gpt4 key购买 nike

在阅读《程序员 R 语言》时,我看到了这个函数

oddcount <- function(x) {
k <- 0
for (n in x) {
if (n %% 2 == 1) k <- k+1
}
return(k)
}

我更喜欢用更简单的风格编写它(即用 lisp)

(defn odd-count [xs]
(count (filter odd? xs)))

我看到函数长度等于count,我可以写奇数吗?那么有内置的map/filter/remove类型的函数吗?

最佳答案

在 R 中,当您使用向量时,人们通常更喜欢一次处理整个向量,而不是循环遍历它(例如,请参阅 this 讨论)。

从某种意义上说,R 确实具有“内置”过滤器和归约函数:您可以选择向量子集的方式。它们在 R 中非常方便,并且有几种方法可以实现 - 我将向您展示几种方法,但是如果您阅读有关 R 的内容并在此类网站上查看其他人的代码,您会学到更多。我还会考虑查看 ?which?'[',其中的示例比我在这里提供的更多。

第一种方法是简单地选择您想要的元素。如果您知道所需元素的索引,则可以使用它:

x <- letters[1:10]
> x
[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j"

如果我们只想要前五个字母,我们可以这样写:

x[1:5]
x[c(1,2,3,4,5)] # a more explicit version of the above

您还可以使用减号来选择您不想要的元素,例如:

 x[-(6:10)]

选择元素的另一种方法是使用 bool 向量:

x <- 1:5
selection <- c(FALSE, TRUE, FALSE, TRUE, FALSE)
x[selection] # only the second and fourth elements will remain

这很重要,因为我们可以通过将向量放入比较函数中来创建这样的向量:

selection <- (x > 3)
> selection
[1] FALSE FALSE FALSE TRUE TRUE

x[selection] # select all elements of x greater than 3
x[x > 3] # a shorthand version of the above

再次,我们可以选择与我们使用的比较相反的内容(请注意,由于它是 bool 值,因此我们使用 ! 而不是 -):

x[!(x > 3)]    # select all elements less than or equal to 3

如果你想进行向量比较,你应该考虑%in%函数。例如:

x <- letters[1:10]
> x %in% c("d", "p", "e", "f", "y")
[1] FALSE FALSE FALSE TRUE TRUE TRUE FALSE FALSE FALSE FALSE

# Select all elements of x that are also "d", "p", "e", "f", or "y"
x[x %in% c("d", "p", "e", "f", "y")]
# And to select everything not in that vector:
x[!(x %in% c("d", "p", "e", "f", "y"))]

以上只是几个例子;我肯定会推荐该文档。我知道在您已经接受答案之后这是一篇很长的文章,但是这种事情非常重要,并且如果您是 R 新手,那么了解它将为您节省大量时间和将来的痛苦,所以我想我将与您分享几种实现此目的的方法。

关于r - 基本的 R 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11738958/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com