【发布时间】:2017-12-12 13:13:20
【问题描述】:
我一直在尝试编写一个基于前一个对象创建新对象的函数(经过几次更改)。然而,我没能做到。 这是我的数据框:
Names <- c("Tom", "Alex", "James", "John", "Wayne", "Harry")
a <- c(1,3,6,8, NA, 5)
b <- c(3,6,9,1, NA,1)
c <- c(7,3,1,6,NA,6)
d <- c(1,4,7,2,NA,8)
data <- data.frame(Names,a,b,c,d)
这是我的功能
NAvalues <- function(x,object, y){
object[sample(seq_len(nrow(object)), x, replace = FALSE),-1] <- NA
summary(object)
y <- data.frame(object)
}
第一部分工作正常,但我正在努力创建一个新对象,它的名称将由 y 指定。
NAvalues(2, data, new)
当我使用它时,我收到一个错误,提示没有new 这样的对象。
谁能告诉我为什么会这样?
【问题讨论】:
-
因为没有名为“新”的对象。您在函数内部创建了一个名为“y”的对象,但无论如何,“y”都会在函数结束时消失。为什么不只是去掉'y'参数,而是从函数内部返回创建的data.frame,然后将函数的输出分配给你想要它调用的东西?所以你会使用这样的功能......
new <- NAvalues(2, data) -
这真的很有帮助。谢谢!
-
只是为了扩展@Dason 的评论:也许您正在考虑通过“通过引用”传递
new(就像您可以/将在例如 C++ 中做的那样)。这不是 R 的工作方式。您必须将 R 函数的输出(return参数)分配给新变量。 -
@kubafrustrat 我用解决方案更新了我的答案