在 R [重复] 中使用 $ vs 括号 [] 从数据框中提取一列

Posted

技术标签:

【中文标题】在 R [重复] 中使用 $ vs 括号 [] 从数据框中提取一列【英文标题】:Extract a column from the dataframe using $ vs bracket [ ] in R [duplicate] 【发布时间】:2022-01-16 10:24:56 【问题描述】:

我有一个需要提取列的函数,当我使用 dataframe$column1[i] 时,该函数返回错误,但是当我使用 dataframe[, column1][i] 时,它会起作用。为什么我不能只使用 dataframe$column vs dataframe[, column]???

function1 <- function(data, x, y) 

        data <- arrange(data, x)

        ylist <- NULL

        for(i in 1:nrow(data))
                x0 <- data[, x][i] 
                data$d0 <- abs(data[,x] - x0)
                yi <- data %>% arrange(d0) %>% select(y) %>% unlist() %>% mean()
                ylist <- c(ylist, yi)

        
        return(ylist)

如果我在下面这样编写函数,它将返回错误:$&lt;-.data.frame(*tmp*, "d0", value = numeric(0)) 中的错误:替换有 0 行,数据有 500

function1 <- function(data, x, y) 
    
            data <- arrange(data, x)
    
            ylist <- NULL
    
            for(i in 1:nrow(data))
                    x0 <- data$x[i] 
                    data$d0 <- abs(data$x - x0)
                    yi <- data %>% arrange(d0) %>% select(y) %>% unlist() %>% mean()
                    ylist <- c(ylist, yi)
    
            
            return(ylist)
    

【问题讨论】:

您能否提供一些数据以便重现它?简单的方法是dput() 【参考方案1】:

来自help("$")的帮助页面:

[[ 和 $ 都选择列表的单个元素。主要区别在于 $ 不允许计算索引,而 [[ 允许。 x$name 等价于 x[["name", exact = FALSE]]。此外,[[ 的部分匹配行为可以使用精确参数来控制。

回答您的问题:它之所以这样工作,是因为它被设计成这样工作。 $ 采用不带引号的列名,而 [[/[ 采用带引号的列名。不同的运算符用于不同的目的。

【讨论】:

以上是关于在 R [重复] 中使用 $ vs 括号 [] 从数据框中提取一列的主要内容,如果未能解决你的问题,请参考以下文章

仅删除R中的空括号[重复]

括号之间的Python正则表达式替换[重复]

在Javascript中使用大括号和方括号的常量声明[重复]

Python从数组中删除括号[重复]

从R中的列名末尾删除不定长度括号中的字符

c# IeNumerable 如果没有则返回[重复]