无法为 R 函数中的子集插入列名称
Trouble interpolating column name for subset in R function
我有(fbodata) 'data.frame': 6181090 obs. of 41 variables:
我想对其进行子集化并保存属于特定子集的部分(如 zip)。当它不在函数中时,我的方法似乎有效,但我最终想使用 sapply。
nmakedir <- function(item, ccol) {
snipped a bunch of code that works
trim<- fbodata[ which(paste(ccol)==item),]
trim%>% drop_na(paste(ccol))
trim<- droplevels(trim
save(trim, file = paste(item, "rda", sep="."))
}
不起作用的那一行是我创建子集的那一行。如果我使用 fbodata$zip
而不是 paste(ccol)
对行进行硬编码,它就可以正常工作。最终,我打算用这样的方式来调用它:
sapply(unique(fbodata$zip),zip, FUN = nmakedir)
感谢任何线索,我已经研究了很长时间。
发生的一些事情:
ccol
是一个字符串。 paste(ccol)
是同一个字符串。您永远不需要仅使用一个参数调用 paste
。 (您可以使用 paste
将非字符串强制转换为字符串,但在这种情况下您应该使用 as.character()
来清楚。)
记住 ccol
是一个字符串,什么是 fbodata$zip
?是专栏!使用 ccol
和括号的等效项是什么? fbodata[[ccol]]
或 fbodata[, ccol]
。您可以将其中任何一个与 fbodata$zip
互换使用。所以,这条坏线
fbodata[ which(paste(ccol)==item),]
# should be this:
fbodata[which(fbodata[[ccol]] == item), ]
drop_na
,像大多数 dplyr
函数一样,期望(从帮助中引用)“裸变量名”,而不是字符串.同样来自帮助,“另请参阅:drop_na_
用于使用常规评估并适合使用 进行编程的版本”。在这种情况下,我认为您只需将 drop_na
替换为 drop_na_
.
您的 droplevels
命令中缺少右括号。
可能还有更多,但这是我在没有任何样本数据的情况下看到的。你的 sapply
调用对我来说看起来很有趣,因为我认为 zip
应该是一个列名,但是当你调用 sapply(unique(fbodata$zip),zip, FUN = nmakedir)
时它需要是你的全局环境中的一个对象。我认为 sapply(unique(fbodata$zip), 'zip', FUN = nmakedir)
更有意义,但如果没有可重现的示例,则无法知道。
您似乎也在编写自己的 split
版本。我可能会从 fbo_split = split(fbodata, fbodata$zip)
开始,然后使用 lapply
到 drop_na_
、droplevels
和 save
,但也许你的代码片段使它变得不那么好想法。
我有(fbodata) 'data.frame': 6181090 obs. of 41 variables:
我想对其进行子集化并保存属于特定子集的部分(如 zip)。当它不在函数中时,我的方法似乎有效,但我最终想使用 sapply。
nmakedir <- function(item, ccol) {
snipped a bunch of code that works
trim<- fbodata[ which(paste(ccol)==item),]
trim%>% drop_na(paste(ccol))
trim<- droplevels(trim
save(trim, file = paste(item, "rda", sep="."))
}
不起作用的那一行是我创建子集的那一行。如果我使用 fbodata$zip
而不是 paste(ccol)
对行进行硬编码,它就可以正常工作。最终,我打算用这样的方式来调用它:
sapply(unique(fbodata$zip),zip, FUN = nmakedir)
感谢任何线索,我已经研究了很长时间。
发生的一些事情:
ccol
是一个字符串。paste(ccol)
是同一个字符串。您永远不需要仅使用一个参数调用paste
。 (您可以使用paste
将非字符串强制转换为字符串,但在这种情况下您应该使用as.character()
来清楚。)记住
ccol
是一个字符串,什么是fbodata$zip
?是专栏!使用ccol
和括号的等效项是什么?fbodata[[ccol]]
或fbodata[, ccol]
。您可以将其中任何一个与fbodata$zip
互换使用。所以,这条坏线fbodata[ which(paste(ccol)==item),] # should be this: fbodata[which(fbodata[[ccol]] == item), ]
drop_na
,像大多数dplyr
函数一样,期望(从帮助中引用)“裸变量名”,而不是字符串.同样来自帮助,“另请参阅:drop_na_
用于使用常规评估并适合使用 进行编程的版本”。在这种情况下,我认为您只需将drop_na
替换为drop_na_
.您的
droplevels
命令中缺少右括号。
可能还有更多,但这是我在没有任何样本数据的情况下看到的。你的 sapply
调用对我来说看起来很有趣,因为我认为 zip
应该是一个列名,但是当你调用 sapply(unique(fbodata$zip),zip, FUN = nmakedir)
时它需要是你的全局环境中的一个对象。我认为 sapply(unique(fbodata$zip), 'zip', FUN = nmakedir)
更有意义,但如果没有可重现的示例,则无法知道。
您似乎也在编写自己的 split
版本。我可能会从 fbo_split = split(fbodata, fbodata$zip)
开始,然后使用 lapply
到 drop_na_
、droplevels
和 save
,但也许你的代码片段使它变得不那么好想法。