在 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)
如果我在下面这样编写函数,它将返回错误:$<-.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 括号 [] 从数据框中提取一列的主要内容,如果未能解决你的问题,请参考以下文章