R 如何修复此函数,以便在数据帧上运行它?

R 如何修复此函数,以便在数据帧上运行它?,r,R,这是两周内我第二次处理包含大量空列的数据。这是公共记录数据,我只对一个类别感兴趣。我怀疑较大数据集的其他类别使用这些列,但我关心的子集没有。所以我过滤掉我不想要的记录,然后我想系统地剔除空列 这个问题有一个很好的方法: 我得到了期望的结果:6obs。共1个变量。但要重用它,我必须替换demo三次。甚至可以使用函数直接转换数据帧吗 我认为你的问题可以归结为范围问题。在R中,当您调用函数时,在该函数中创建的所有内容都是本地的,在该函数之外无法访问。因此,当您将演示数据帧传递给函数时,它是否在该函数

这是两周内我第二次处理包含大量空列的数据。这是公共记录数据,我只对一个类别感兴趣。我怀疑较大数据集的其他类别使用这些列,但我关心的子集没有。所以我过滤掉我不想要的记录,然后我想系统地剔除空列

这个问题有一个很好的方法:


我得到了期望的结果:
6obs。共1个变量
。但要重用它,我必须替换
demo
三次。甚至可以使用函数直接转换数据帧吗

我认为你的问题可以归结为范围问题。在R中,当您调用函数时,在该函数中创建的所有内容都是本地的,在该函数之外无法访问。因此,当您将演示数据帧传递给函数时,它是否在该函数内部操作它,但在函数外部无法访问它。为了从函数中得到结果,人们通常返回一个值并分配结果。例如:

add<- function(x,y) { return(x+y)}
res <- add(1,2)
> res
[1] 3

add您没有从函数返回任何内容。在该函数的末尾添加一行
df
,它可以正常工作。这种混淆可能是关于传递
df
和在函数中修改,并期望全局修改它。这不是它的工作原理。您警告不要使用糟糕的解决方案,但真的有必要展示它吗<代码>哇,罗兰。严厉的我发现这个答案非常有用。向那些还没有准备好的人隐瞒信息是一种无稽之谈。
drop_empty_cols <- function(df) {
  empty_columns <- sapply(df, function (k) all(is.na(k) | k == ""))
  df <- df[!empty_columns]
}

drop_empty_cols(my_frame)
demo <- read.table(text="Real.Val All.NA Nothin.here
1      3.5     NA         tmp
2      3.0     NA         tmp
3      3.2     NA         tmp
4      3.1     NA         tmp
5      3.6     NA         tmp
6      3.9     NA         tmp" , header = TRUE)

demo$Nothin.here <- ""
empty_columns <- sapply(demo, function (k) all(is.na(k) | k == ""))
demo <- demo[!empty_columns]
add<- function(x,y) { return(x+y)}
res <- add(1,2)
> res
[1] 3
drop_empty_cols <- function(df) {
  empty_columns <- sapply(df, function (k) all(is.na(k) | k == ""))
  return(df[!empty_columns])
}

res<-drop_empty_cols(demo)

 str(res)
'data.frame':   6 obs. of  1 variable:
 $ Real.Val: num  3.5 3 3.2 3.1 3.6 3.9
drop_empty_cols <- function(df) {
  empty_columns <- sapply(df, function (k) all(is.na(k) | k == ""))
  demo <<- (df[!empty_columns])
}

drop_empty_cols(demo)

str(demo)
'data.frame':   6 obs. of  1 variable:
 $ Real.Val: num  3.5 3 3.2 3.1 3.6 3.9